2008-11-08 3 views
8

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

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

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

ответ

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

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

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