Я видел много вопросов, связанных с отображением DTOs в Domain Objects, но я не чувствовал, что они ответили на мой вопрос. Раньше я использовал много методов и имел свои собственные мнения, но я ищу что-то более конкретное.Рекомендации по сопоставлению объекта DTO с доменом?
Ситуация:
У нас есть много объектов домена. Мы используем модель CSLA, поэтому наши объекты домена могут быть довольно сложными и содержать свой собственный доступ к данным. Вы не хотите передавать их по проводам. Мы собираемся написать несколько новых сервисов, которые возвратят данные в нескольких форматах (.Net, JSON и т. Д.). Для этого (и по другим причинам) мы также создаем обедненный объект передачи данных, чтобы пройти по проводам.
Вопрос в том, как должен быть подключен объект DTO и Domain?
Моя первая реакция заключается в использовании Fowler, DTO pattern-type solution. Я видел это много раз, и мне это кажется правильным. Объект домена не содержит ссылки на DTO. Для создания DTO из объекта домена вызывается внешний объект («сопоставитель» или «ассемблер»). Обычно на стороне объекта домена есть ORM. Недостатком этого является то, что «картограф» имеет тенденцию становиться чрезвычайно сложным для любой реальной ситуации и может быть очень хрупким.
Другая идея заключается в том, что объект домена «содержит» DTO, так как это просто постный объект данных. Свойства объекта домена будут внутренне ссылаться на свойства DTO и могут просто вернуть DTO, если его попросят. Я не вижу никаких проблем с этим, но он чувствует себя не так. Я видел некоторые статьи, в которых люди, использующие NHibernate, использовали этот метод.
Есть ли другие способы? Один из способов, над которым стоит использовать? Если да, то нет?
Спасибо за любое понимание заранее.
Автомобиль выглядит интересным. Я видел много кода, прежде чем он заменит его. Моя основная проблема заключается в том, что если по какой-то причине я собираюсь застрять с тонкостью кода сопоставления, я бы предпочел сам контролировать ее. –
Когда мы переходим из объектов DTOs_to_ Domain, это сопоставление на 100% вручную. Решить проблему гораздо труднее, поскольку мы стараемся не ограничивать использование наших объектов на основе операций, а не просто контейнерами данных. Идти _to_ a DTO, это непростая задача. –
Я согласен с тем, что это неправильно, поскольку объект домена не должен знать объект dto. Хотя в этом случае они могут быть связаны, их назначение полностью раздельно (dtos обычно делается для цели), и вы создадите ненужную зависимость. – Sinaesthetic