2009-06-15 7 views
1

Ich füge meiner Webanwendung Logik hinzu, um Geo-Koordinaten für einen Benutzer zu suchen, sie zu speichern, dann diese Koordinaten zu verwenden und die Zeitzone zu suchen. Mein erster Schritt war das Hinzufügen einer GeoCodeUser() - Methode zu einem MappingService, den ich für andere kartenbezogene Aufgaben definiert hatte. Da das Nachschlagen der beiden Datenbits auf zwei verschiedenen REST-Diensten beruhte, habe ich die beiden Nachschlagetasks in AddressGeoCoder und TimeZoneCoder aufgeteilt und diese zum Abrufen der Daten und des UserRepository zum Speichern dieser Daten verwendet. Der seltsame Teil dieser Lösung besteht darin, dass diese Methode zwar Zugriff auf das Repository und zwei "Codierer" benötigt, die anderen Methoden in der Klasse jedoch nicht. Also jedes Mal, wenn ich diesen Dienst verwende, um andere Dinge zu tun, bekomme ich Abhängigkeiten, die ich nicht brauche, und dann lasse ich sie fallen. Also hier ist das, was ich frage mich:Basierend auf DDD-Praktiken, wo sollte diese Logik gehen und wie vermeide ich unnötige Abhängigkeiten?

  • dies in einem Dienst sein sollte oder möglichst in dem ‚User‘ Modellobjekt (da es verschiedene Operationen zu koordinieren) selbst?

  • Wenn ja, soll ich einen Dienst sein zu definieren, basierend auf es Abhängigkeiten & Bereich von Interesse (d UserGeoCodingService) oder nur Interessengebiet (MappingService) mit zusätzlichen Abhängigkeiten?

Vielen Dank für Ihre Einsicht!

James

Antwort

1

IMHO, DDD ist alles über das Modell, und mit dem Ausdruck, wie die Domain-Experten sagen, die Dinge funktionieren. Ich weiß nicht wirklich viel über diese Domäne, daher kann ich nicht genau sagen, was mehr Sinn macht. Sie benötigen einen Experten oder ein konsistentes Modell als Grundlage. Wenn Sie noch kein Modell haben, hören Sie einfach auf zu programmieren und bauen Sie Ihr Modell auf.

Zuerst benötigen Sie eine allgegenwärtige Sprache, die Ihnen hilft, einen besseren Einblick zu bekommen und die Klassen entsprechend zu erstellen. Ist die Trennung nach Interessensgebieten nur sinnvoll für die Domain-Experten?

Wie erklären Domänenexperten den Prozess? Verwenden sie Begriffe wie AddressGeoCoder, TimeZoneCoder? Wenn ja, dann ist es ein gutes Design. Ansonsten solltest du besser wissen, wie sie denken.

Über die Klasse, die nur eine Methode hat, die ein Repository und zwei Codierer verwendet, gibt es ein paar mögliche Ideen (siehe oder erstellen Sie eine, die für die Domäne Sinn macht).

  • Nur die Methode erhalten ihre Abhängigkeiten von den Parametern
  • Extract diese Methode zu einer anderen Klasse (wie ein Service, wie Sie gesagt haben)
  • Fasse diese 3 Einheiten in nur einer (wie GeoCodeUserData, wieder, wenn dieser Sinn für die Domäne macht)
  • einen Dependency Injection-Framework verwenden, um zusätzliche Arbeit einschließlich diesen Abhängigkeiten zu vermeiden
  • Konstruktor Lassen nulls akzeptieren (und befassen sich mit Fehlern auf die gleiche Weise ein Domain-Experten sagen, es soll)
  • erfolgen
  • Was auch immer Ihr Erfolg anders, validiert von einem Domain-Experte

DDD ist eine intensive Arbeit von Refactoring auch, wenn Sie einen besseren Einblick der Domain zu bekommen, so ist es gut zu haben Tests für Sachen, so dass Sie gewonnen haben‘ Ich habe Angst, die notwendigen Änderungen vorzunehmen.

Verwandte Themen