Является репозиторием частью агрегата
Нет, полностью отдельно
средство, с помощью которого сохраняется агрегат, принадлежащий уровню инфраструктуры?
И это тоже не совсем так.
Основная роль репозитория заключается в том, что он действует как граница между приложением и данными. Первоначальное обсуждение репозиториев в синей книге представило репозитории с семантикой коллекций; интерфейс для репозитория был таким же, как если бы данные просто хранились в коллекции в памяти.
Во-вторых, разумно ли увеличивать сложность и удобство обслуживания программного обеспечения для достижения читабельности, или это противоречит цели DDD в целом?
Не столько «читабельность», сколько «коммуникация»; см. главу 2 синей книги
В проекте без общего языка разработчики должны переводить для экспертов в предметной области .... Перевод запутывает концепции, что приводит к деструктивному рефакторингу кода .... Проект сталкивается с серьезными проблемами, когда его язык сломан ....
Сложность в данном случае - это сложность, извлеченная из предметной области - нам, вероятно, не следует воображать, что мы можем смоделировать предметную область с тысячей тонко различных концепций, используя одну или две абстракции, не зависящие от предметной области.
Вы заявляете, что считаете эту строку подкласса для простой читабельности, несмотря на то, что это может привести к сотням дополнительных классов, было бы разумным подходом, учитывая, что это послужило бы катализатором для общего языка
Конечно, не подклассы, нет. Но я бы рекомендовал иметь уникальное имя (в коде) для каждой уникальной концепции (в предметной области), даже если эти концепции имеют общие представления.
Чтобы выбрать наивный пример, Time
не Money
, даже в тех случаях, когда базовым представлением обоих является long
.
«Моделирование предметной области, сделанное функциональным» Скотта Влашина включает расширенный пример. В какой-то момент он моделирует подтвержденный адрес электронной почты и непроверенный адрес электронной почты как явно отличающиеся друг от друга; даже несмотря на то, что у них обоих есть базовые строковые представления, он все же делает шаг по созданию единого типа объединения для каждого из них, чтобы зафиксировать в коде тот факт, что эти две концепции не заменяют друг друга.
Эта «сложность» на самом деле просто согласовывает артефакты кода с вездесущим языком экспертов предметной области.
Теперь, в зависимости от того, в какой Blub вы кодируете, может возникнуть дополнительная сложность в артефактах кода для создания эти разные имена; как демонстрирует Скотт, в F # это действительно просто, но может быть не так просто на вашем обычном рабочем языке. Я считаю, что если ваш выбор языка усложняет моделирование, то, возможно, вам сначала стоит посмотреть, есть ли другой язык, более подходящий для этой задачи.
person
VoiceOfUnreason
schedule
18.12.2017