DDD, репозиторий, и инкапсуляция

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

Если вы сделаете git stash, чтобы спрятать их все, git stash apply, чтобы вернуть их снова, а затем git checkout f.c в рассматриваемом файле, чтобы эффективно сбросить его.

Если вы хотите распаковать этот файл, запустите git reset --hard, а затем снова запустите git stash apply, воспользовавшись тем, что git stash apply не очищает diff из стека.

10
задан Jim G. 4 October 2009 в 03:09
поделиться

2 ответа

На большинство вопросов уже даны ответы, но на вопрос «Как называется оператор *?» Технический термин - «звездочка» (происходит от латинского слова asteriscum , что означает «звездочка», что, в свою очередь, происходит от греческого ἀστερίσκος ). Однако часто его называют «звездой» или, как указано выше, «сплатом».

мой первоначальный ответ (ниже) действительно не был в духе DDD. Это включало создание объектов домена простыми контейнерами, дизайн, который многие считают анти-паттерном (см. Модель анемической области ).

Дополнительный уровень между Частью и ] IPartRepository (я назову его IPartService ) решает эту проблему: переместите GetChildren (часть) в IPartService и удалите его из Part , затем вызовите клиентский код IPartService , чтобы получить объекты Part и их дочерние объекты, а не напрямую обращаться к репозиторию. Класс Part по-прежнему имеет свойство ChildParts (или Children ) - он просто не знает, как его заполнить.

Очевидно,

2
ответ дан 4 December 2019 в 04:36
поделиться

Недостающая часть уравнения здесь - это поведение объекта Parts и то, как вы хотите работать с агрегатом. Нужно ли вам работать с отдельными дочерними элементами каждой части до n-й рекурсии, или вы всегда работаете только с «корневой» частью (то есть с теми, у кого нет родителей) и ее дочерними элементами в целом?

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

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

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

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

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

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

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

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

0
ответ дан 4 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: