Я видел много вопросов, связанных с отображением DTO в доменные объекты, но я не чувствовал, что они ответили на мой вопрос. Я использовал много методов раньше и у меня есть собственное мнение, но я ищу что-то более конкретное.
Ситуация:
У нас много доменных объектов. Мы используем модель CSLA, поэтому наши доменные объекты могут быть довольно сложными и содержать собственный доступ к данным. Вы не хотите передавать их по проводам. Мы собираемся написать несколько новых сервисов, которые будут возвращать данные в нескольких форматах (.Net, JSON и т.д.). По этой (и другим) причинам мы также создаем компактный объект передачи данных для передачи по проводам.
Мой вопрос: как должны быть связаны объект DTO и домен?
Моя первая реакция - использовать решение типа паттерна Fowler, DTO. Я видел это много раз, и мне кажется, что это правильно. Доменный объект не содержит ссылки на DTO. Внешний объект ("преобразователь" или "ассемблер") вызывается для создания DTO из объекта домена. Обычно на стороне объекта домена есть ORM. Недостатком этого является то, что "картограф" имеет тенденцию быть чрезвычайно сложным для любой реальной ситуации и может быть очень хрупким.
Еще одна идея состоит в том, чтобы Доменный объект "содержал" DTO, поскольку это всего лишь скудный объект данных. Свойства объекта Domain будут внутренне ссылаться на свойства DTO и могут просто возвращать DTO, если потребуется. Я не вижу проблем с этим, но он чувствует себя неправильно. Я видел несколько статей, в которых люди, использующие NHibernate, использовали этот метод.
Есть ли другие способы? Стоит ли использовать один из вышеперечисленных способов? Если так или нет, то почему?