Объекты передачи данных, доменные объекты и репозитории - PullRequest
8 голосов
/ 08 ноября 2008

Я пытаюсь выяснить, как все это работает вместе. Я знаю, что DTO - это просто контейнер данных, который Объекты Домена передают туда и обратно в формы и тому подобное. Содержит ли объект Domain объект DTO или DTO и объект Domain просто имеют все те же свойства, которые будут отображаться вручную?

Если я раскрываю свой тип DTO в сервисе, как я могу использовать методы получения и установки, не создавая циклический переход для каждой операции получения / установки на клиенте? Я знаю, что у вас может быть один длинный конструктор, но он может быть уродливым, если у вас более 7 свойств.

При реализации шаблона репозитория я передаю DTO или объект домена?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2009
  • Объекты DTO и Domain должны быть разделены.
  • Должен быть картограф, который сопоставляет DTO с объектом домена, а объект домена с DTO. Этот преобразователь должен быть реализацией интерфейса, причем преобразователь по умолчанию использует отражение для сопоставления объектов друг другу.
  • Хранилище должно быть службой, которая возвращает объекты домена, которые сами должны обслуживать.
  • Если DTO - это класс, предоставляемый веб-службой, создаваемый WSDL определяет свойство как элемент, а создаваемый прокси-сервер на другой стороне просто создает свойство getter / setter, которое запускается на сам клиент, поэтому геттеры и сеттеры не вызывают туда-обратно.
  • Даже если вы просто создадите общедоступную переменную в вашем DTO, прокси будет реализован как метод получения и установки.
1 голос
/ 08 ноября 2008

Я думаю, что лучше, чтобы DTO содержал ссылку на объект Domain, чтобы потребители DTO могли начать использовать объект Domain. Тем не менее, если потребители DTO не должны изменять объект Domain, вам может потребоваться, чтобы DTO содержал значения, инкапсулированные в объекте Domain. Это может быть сложно, так как вам может понадобиться сделать глубокую копию объекта Domain.

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

...