2014-10-28 2 views
1

Я немного озадачен, выясняя различия между этими тремя. Предположим, что у меня есть Клиент -> Адресное отношение (JPA) Detached Entity также будет иметь это (ожидаемая загрузка). Где необходимо иметь дополнительный сводный корень? Где нужно иметь DTO? Это все более или менее одинаково?DDD: Может ли кто-нибудь объяснить различия между DTO, Aggregate Root и Detached Entity?

Одна из причин может заключаться в том, что сущность, совместимая с JPA, имеет некоторую информацию, которую клиент просто не интересует, например. @Entity, @Id, @OneToMany.

Я могу легко конвертировать его в JSON/XML с помощью JAX-RS/-WS, и почти каждый клиент может с этим справиться, и где это необходимо? Все ли это почти то же самое или мне не хватает чего-то важного?

+0

AggregateRoot не относится к DDD? Хммм ... Я не ожидал, что я ошибаюсь. К сожалению, Мартин Фаулер тоже вводил в заблуждение: http://martinfowler.com/bliki/DDD_Aggregate.html. В любом случае ... Мне интересно узнать, должен ли мой сервисный интерфейс ... тот, который принадлежит Microservice ..., должен вернуть отдельную сущность, или я должен перенести его в график связанных TO ... и в чем разница , где преимущества ... Только один намек мой друг: прежде чем downvoting попытаться прояснить, хорошо? – Subcomandante

+0

А, я думал о корнях запросов. Похоже, я вдвойне безоговорочно ответил на ваш вопрос :) Извините за неудобства. – kostja

+0

Нет проблем и thx для усилий ;-) – Subcomandante

ответ

1

Humm, я действительно не понимаю, какова ваша настоящая необходимость? В чем проблема, которую вы пытаетесь решить, пытаясь использовать концепции DDD или DTO ...

DTO не сопоставим с агрегированным корнем (как и с сущностью), у объекта есть данные и поведение (это не так для DTO, это просто данные).

Итак, модель домена должна быть доменом Driven ;-), а некоторые строительные блоки полезны для ее реализации, например: Entity, Aggregate ... И когда вы используете ORM, может быть сложно изолировать ваш домена, поэтому вам нужно попробовать что-то чистое в своем домене с меньшим шумом, как вы можете. Существует множество стратегий для ее решения.

Вы можете найти больше там: http://elegantcode.com/2009/11/13/dtos-ddd-the-anemic-domain-model/

+0

Реальная проблема заключается в том, чтобы описать новую архитектуру для существующего программного обеспечения (которое нужно выбросить из-за недостающих концепций в архитектуре). Спасибо за ссылку! – Subcomandante

2

Вы будете создавать совокупный корень, если вы будете следовать принципам DDD кастрированный баран вы используете JPA или нет. Это один из самых фундаментальных блоков в DDD. Из книги DDD книги Эрика Эванса:

Заполнители размечать сферу, внутри которой инварианты должны быть maintaned на каждом этапе жизненного цикла. Следующие шаблоны, заводов и хранилищ, работают на агрегатах.

DTO и отдельные лица относятся к JPA (технические ограничения). совокупный корень также является объектом . Когда суммарный корень становится неуправляемым (по контексту постоянства), он называется удаленным объектом.

Возможно, ваш вопрос можно перефразировать в: Я должен вернуть совокупный корень в отдельностоящий объект или DTO? Ответ субъективен и зависит от вашей среды.

Выгода возвращение совокупного корня в качестве отдельного лица это вам не нужно, чтобы создать новый класс DTO. Вы также можете вызвать методы, принадлежащие корню . Недостатком является то, что вы обычно не заполняете полный граф объектов по причине производительности, потому что некоторые совокупные корни могут иметь очень глубокую иерархию. Это приведет к ленивому исключению загрузки, если его не обработать должным образом.

Возврат DTO вместо Совокупный корень считается более прочным. Вам нужно будет создать новый класс DTO для каждого «Use case»заполнить корень. Это может быть слишком громоздко для небольшой системы, но если вы используете DDD, я считаю, что ваше требование сложное.

+0

Thx для выяснения ... был определенно полезен. Я думал более или менее так же, но теперь у меня появилась идея быть в синхронизации с моими мыслями. – Subcomandante