Как это имеет смысл?
Краткий ответ: это не так .
Более длинный ответ: тяжелые шаблоны для разработки модели предметной области не применяются к тем частям вашего решения, которые являются просто базой данных.
Уди Дахан имел интересное наблюдение, которое может помочь прояснить это
Дахан считает, что сервис должен иметь как некоторую функциональность, так и некоторые данные. Если у него нет данных, то это просто функция. Если все, что он делает, выполняет CRUD-операции с данными, то это база данных.
В конце концов, цель модели предметной области состоит в том, чтобы гарантировать, что все обновления данных поддерживают текущий бизнес-инвариант. Или, другими словами, модель домена отвечает за обеспечение правильности базы данных, которая действует как система записи .
Когда вы имеете дело с системой CRUD, вы обычно не являетесь системой записи данных. Реальный мир книга записи, и база данных только локально кэшировать представление о реальном мире.
Например, большая часть информации, которая появляется в профиле пользователя, например адрес электронной почты или выданный правительством идентификационный номер, имеет источник правды, который живет за пределами вашего бизнеса - это чужой почтовый администратор, который назначает и отзывает адреса электронной почты, а не ваше приложение. Правительство назначает SSN, а не ваше приложение.
Таким образом, вы обычно не будете выполнять какую-либо проверку домена для данных, поступающих к вам из внешнего мира; у вас могут быть проверки, чтобы гарантировать, что данные правильно сформированы и должным образом очищены ; но это не ваши данные - ваша модель предметной области не получает вето.
В подходе DDD с использованием уровней кажется, что операции CRUD проходят через уровень домена. но, по крайней мере, в нашем случае это не имеет смысла.
Это верно для случая, когда база данных является книгой рекордов .
Уарзи выразился так .
Работая над большим количеством устаревшего кода, я наблюдаю распространенные ошибки, чтобы определить, что находится внутри домена, а что снаружи.
Приложение может считаться CRUD, только если в модели данных отсутствует бизнес-логика. Даже в этом (редком) случае ваша модель данных не является моделью вашего домена. Это просто означает, что, поскольку бизнес-логика не используется, нам не нужна абстракция для управления ею, и поэтому у нас нет доменной модели.
Мы используем модель домена для управления данными, которые принадлежат домену; данные из-за пределов домена уже обрабатываются где-то еще - мы просто кешируем копию.
Грег Янг использует складские системы в качестве основной иллюстрации решений, в которых книга рекордов находится где-то еще (т. Е. На складе). Реализация, которую он описывает, во многом похожа на вашу: одна логическая база данных для сбора сообщений, полученных из хранилища, а затем отдельная логическая база данных, кеширующая выводы, сделанные на основе анализа этих сообщений.
Итак, может быть, у нас есть два ограниченных контекста здесь? Каждый с другой моделью дляinvestment account
Может быть. Я не хотел бы помечать это как ограниченный контекст, потому что не ясно, какой другой багаж идет вместе с ним. Возможно, у вас два контекста, это может быть один контекст с тонкими различиями в вездесущем языке, который вы еще не выбрали.
Возможный лакмусовый тест: сколько экспертов по доменам вам нужно, чтобы два специалиста по доменам покрывали этот спектр, или только один, который по-разному говорит о компонентах. По сути, вы можете догадаться, сколько у вас ограниченных контекстов, работая по закону Конвея в обратном направлении.
Если вы считаете, что ограниченные контексты согласованы со службами, может быть проще: сможете ли вы развернуть эти две части функциональности независимо? Да предлагает два ограниченных контекста; но если они должны быть синхронизированы, то, возможно, только один.