Ich habe viele Fragen im Zusammenhang mit der Zuordnung von DTOs zu Domänenobjekten gesehen , aber ich hatte nicht das Gefühl, dass sie meine Frage beantwortet haben. Ich habe schon viele Methoden angewendet und habe meine eigene Meinung, aber ich suche etwas Konkreteres.
Die Situation:
Wir haben viele Domain-Objekte. Wir verwenden ein CSLA-Modell, sodass unsere Domänenobjekte sehr komplex sein können und ihren eigenen Datenzugriff enthalten. Sie möchten diese nicht auf dem Draht weitergeben. Wir werden einige neue Dienste schreiben, die Daten in einer Reihe von Formaten (.Net, JSON usw.) zurückgeben. Aus diesem (und anderen Gründen) erstellen wir auch ein schlankes Datenübertragungsobjekt, das auf dem Draht herumgereicht werden soll.
Meine Frage ist: Wie sollen das DTO- und das Domain-Objekt verbunden werden?
Meine erste Reaktion ist die Verwendung einer Fowler-DTO-Musterlösung . Ich habe das schon oft gesehen und es fühlt sich für mich richtig an. Das Domänenobjekt enthält keinen Verweis auf das DTO. Eine externe Entität (ein "Mapper" oder "Assembler") wird aufgerufen, um ein DTO aus einem Domänenobjekt zu erstellen. Normalerweise befindet sich auf der Domänenobjektseite ein ORM . Der Nachteil dabei ist, dass der "Mapper" für jede reale Situation extrem komplex wird und sehr zerbrechlich sein kann.
Eine andere Idee ist, dass das Domänenobjekt das DTO "enthält", da es nur ein schlankes Datenobjekt ist. Die Domänenobjekteigenschaften verweisen intern auf die DTO-Eigenschaften und können das DTO nur zurückgeben, wenn Sie dazu aufgefordert werden. Ich kann keine Probleme damit sehen, aber es fühlt sich falsch an. Ich habe einige Artikel gesehen, in denen Leute, die NHibernate verwenden, diese Methode zu verwenden schienen .
Gibt es andere Möglichkeiten? Lohnt sich eine der oben genannten Möglichkeiten? Wenn ja oder wenn nicht, warum?