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