Самая простая концепция для понимания, хотя, возможно, и не самая лучшая, это то, что вы изменили три файла и хотите сохранить один файл.
Если вы сделаете git stash
, чтобы спрятать их все, git stash apply
, чтобы вернуть их снова, а затем git checkout f.c
в рассматриваемом файле, чтобы эффективно сбросить его.
Если вы хотите распаковать этот файл, запустите git reset --hard
, а затем снова запустите git stash apply
, воспользовавшись тем, что git stash apply
не очищает diff из стека.
На большинство вопросов уже даны ответы, но на вопрос «Как называется оператор *?» Технический термин - «звездочка» (происходит от латинского слова asteriscum , что означает «звездочка», что, в свою очередь, происходит от греческого ἀστερίσκος ). Однако часто его называют «звездой» или, как указано выше, «сплатом».
мой первоначальный ответ (ниже) действительно не был в духе DDD. Это включало создание объектов домена простыми контейнерами, дизайн, который многие считают анти-паттерном (см. Модель анемической области ). Дополнительный уровень между Частью
и ] IPartRepository
(я назову его IPartService
) решает эту проблему: переместите GetChildren (часть)
в IPartService
и удалите его из Part
, затем вызовите клиентский код IPartService
, чтобы получить объекты Part
и их дочерние объекты, а не напрямую обращаться к репозиторию. Класс Part
по-прежнему имеет свойство ChildParts
(или Children
) - он просто не знает, как его заполнить.
Очевидно,
Недостающая часть уравнения здесь - это поведение объекта Parts
и то, как вы хотите работать с агрегатом. Нужно ли вам работать с отдельными дочерними элементами каждой части
до n-й рекурсии, или вы всегда работаете только с «корневой» частью
(то есть с теми, у кого нет родителей) и ее дочерними элементами в целом?
Наличие агрегированного корня Part
, содержащего список довольно типизированных частей
в качестве дочерних, кажется, что это не особенно хорошо выражает вашу модель предметной области, но вы мог бы сделать это и рекурсивно лениво загружать каждую дочернюю коллекцию. Тем не менее, я бы все равно был очень осторожен там, где возможна бесконечная рекурсия.
Что касается вашего второго беспокойства, DTO не являются t для передачи данных между уровнями, а также для передачи данных на уровень вашего приложения и из него.
Они очень полезны, если вы используете сервис-ориентированную архитектуру (вы упоминаете веб-сервисы, но это может быть любая SOA ). Ваши службы будут запрашивать ваши репозитории, выполнять любую дополнительную работу, а затем отображать объекты вашего домена в плоские DTO для отправки обратно запрашивающим клиентам. DTO должны быть простыми, не содержать логики и специфических функций приложения с целью сериализации.
Используйте объекты домена внутри вашего приложения, а DTO - снаружи.
а затем сопоставьте объекты своего домена с плоскими DTO для отправки обратно запрашивающим клиентам. DTO должны быть простыми, не содержать логики и специфических функций приложения с целью сериализации.Используйте объекты вашего домена внутри вашего приложения, а DTO вне.
а затем сопоставьте объекты своего домена с плоскими DTO для отправки обратно запрашивающим клиентам. DTO должны быть простыми, не содержать логики и специфических функций приложения с целью сериализации.Используйте объекты вашего домена внутри вашего приложения, а DTO вне.