Для этого мы можем использовать шаблон Factory, Memento и Builder. Фабрика скрывает подробности о том, как создать экземпляр модели домена из DTO. Memento позаботится о сериализации / десериализации модели домена в / из DTO и может даже получить доступ к частным членам. Построитель позволяет отображать из DTO в домен с свободным интерфейсом.

ел много вопросов, связанных с отображением DTO в доменные объекты, но я не чувствовал, что они ответили на мой вопрос. Я использовал много методов раньше и у меня есть собственное мнение, но я ищу что-то более конкретное.

Ситуация:

У нас много доменных объектов. Мы используем модель CSLA, поэтому наши доменные объекты могут быть довольно сложными и содержать собственный доступ к данным. Вы не хотите передавать их по проводам. Мы собираемся написать несколько новых сервисов, которые будут возвращать данные в нескольких форматах (.Net, JSON и т. Д.). По этой (и другим) причинам мы также создаем компактный объект передачи данных для передачи по проводам.

У меня вопрос, как должны быть связаны объект DTO и домен?

Моя первая реакция заключается в использованииФаулер, DTO решение типа шаблона, Я видел это много раз, и мне кажется, что это правильно. Доменный объект не содержит ссылки на DTO. Внешний объект («преобразователь» или «ассемблер») вызывается для создания DTO из объекта домена. Обычно на стороне объекта домена есть ORM. Недостатком этого является то, что «картограф» имеет тенденцию быть чрезвычайно сложным для любой реальной ситуации и может быть очень хрупким.

Еще одна идея заключается в том, чтобы объект Domain «содержал» DTO, поскольку это всего лишь скудный объект данных. Свойства объекта Domain будут внутренне ссылаться на свойства DTO и могут просто возвращать DTO, если потребуется. Я не вижу проблем с этим, но он чувствует себя неправильно. Я видел несколько статей, в которых люди, использующие NHibernate, использовали этот метод.

Есть ли другие способы? Стоит ли использовать один из вышеперечисленных способов? Если так или нет, то почему?

Спасибо за любое понимание заранее.

Ответы на вопрос(10)

Ваш ответ на вопрос