Widziałem wiele pytań związanych z mapowaniem DTO na obiekty domeny, ale nie czułem, że odpowiedziały na moje pytanie. Używałem już wielu metod i mam własne opinie, ale szukam czegoś bardziej konkretnego.
Sytuacja:
Mamy wiele obiektów domeny. Używamy modelu CSLA, więc nasze obiekty domeny mogą być dość złożone i zawierają własny dostęp do danych. Nie chcesz ich przekazywać na drucie. Będziemy pisać nowe usługi, które będą zwracać dane w wielu formatach (.Net, JSON itp.). Z tego (i innych powodów) tworzymy również niewielki obiekt do przesyłania danych, który będzie przekazywany po kablu.
Moje pytanie brzmi: jak połączyć DTO i obiekt domeny?
Moją pierwszą reakcją jest użycie rozwiązania Fowler, typu DTO . Widziałem to wiele razy i wydaje mi się to właściwe. Obiekt domeny nie zawiera żadnego odniesienia do DTO. Jednostka zewnętrzna („mapper” lub „assembler”) jest wywoływana w celu utworzenia DTO z obiektu domeny. Zwykle jest ORM po stronie obiektu domeny . Wadą tego jest to, że „twórca map” staje się niezwykle złożony w każdej rzeczywistej sytuacji i może być bardzo delikatny.
Innym wysuniętym pomysłem jest to, aby obiekt domeny „zawierał” DTO, ponieważ jest to po prostu ubogi obiekt danych. Właściwości obiektu domeny odwołują się wewnętrznie do właściwości DTO i mogą po prostu zwrócić DTO, jeśli zostanie o to poproszony. Nie widzę z tym żadnych problemów, ale czuję się źle. Widziałem artykuły, w których ludzie używają NHibernate wydają się używać tej metody.
Czy są inne sposoby? Czy warto skorzystać z jednego z powyższych sposobów? Jeśli tak, a jeśli nie, dlaczego?