Datentransferobjekte, Domänenobjekte und Repositories

8

Ich versuche herauszufinden, wie all das zusammen funktioniert. Ich weiß, dass ein DTO im Grunde nur ein Container von Daten für die Domain-Objekte ist, um Formulare und ähnliches zu übergeben. Enthält das Domänenobjekt ein DTO oder haben das DTO und das Domänenobjekt nur dieselben Eigenschaften, die manuell zugeordnet werden?

Wenn ich meinen DTO-Typ in einem Dienst offenlege, wie verwende ich die Getter und Setter, ohne für jeden get / set-Vorgang auf dem Client einen Umlauf zu erstellen? Ich weiß, dass Sie einen langen Konstruktor haben können, aber das kann hässlich werden, wenn Sie mehr als 7 Eigenschaften haben.

Übergeben Sie bei der Implementierung des Repository-Musters das DTO oder das Domain-Objekt?

    
Charles Graham 08.11.2008, 07:08
quelle

2 Antworten

4
  • Die DTOs und die Domain-Objekte sollten getrennt sein.
  • Es sollte einen Mapper geben, der ein DTO einem Domain-Objekt und ein Domain-Objekt einem DTO zuordnet. Dieser Mapper sollte eine Implementierung einer Schnittstelle sein, wobei der Standard-Mapper eine Reflektion verwendet, um die Objekte einander zuzuordnen.
  • Das Repository sollte ein Dienst sein, der die Domänenobjekte zurückgibt, die selbst Dienste sein sollten.
  • Wenn das DTO eine Klasse ist, die von einem Webdienst bereitgestellt wird, definiert die WSDL, die erstellt wird, die Eigenschaft als ein Element und der Proxy, der auf der anderen Seite erstellt wird, erstellt nur eine Getter / Setter-Eigenschaft, die ausgeführt wird der Client selbst, so dass die Getter und Setter keine Rundreise verursachen.
  • Auch wenn Sie nur eine öffentliche Variable in Ihrem DTO erstellen, wird der Proxy als Getter und Setter implementiert.
Charles Graham 11.02.2009, 06:31
quelle
1

Ich denke, es ist besser, wenn das DTO einen Verweis auf das Domain-Objekt enthält, damit die DTO-Consumer das Domain-Objekt verwenden können. Wenn die DTO-Consumers das Domain-Objekt nicht mutieren müssen, muss der DTO jedoch möglicherweise die im Domain-Objekt eingekapselten Werte enthalten. Dies kann schwierig sein, da Sie möglicherweise eine tiefe Kopie des Domänenobjekts erstellen müssen.

Ich bin mir nicht sicher, wieso es ein Problem ist, dass das Aussetzen eines DTO-Typs als Dienst dazu führen würde, dass seine Getter / Setter einen Hin- und Rückflug machen würden. Wenn es sich bei dem Dienst um einen Remotedienst handelt, wird das zurückgegebene DTO trotzdem serialisiert und Ihre Getter / Setter erhalten die Kopie der Werte. Wenn der Dienst nicht entfernt ist, scheint es keinen großen Nachteil zu sein, eine "Rundreise" zu unternehmen, da sich der Client und der Dienst im selben Prozessraum befinden.

    
Alan 08.11.2008 13:51
quelle

Tags und Links