Ви можете відобразити рівень запасів на веб-сторінці, або ви можете відобразити номер видання інвентарю на складі (уявіть, що ваш інвентар - це книги, журнали тощо). Ця інформація надходить із домену Інвентар.
Головне, що слід помітити в цей момент, це те, що ви говорите про вигляд, а це означає, що використання несвіжих даних є прийнятним.
Незважаючи на це, вам потрібно не взаємодіяти з агрегатами (які відповідають за те, щоб зміни не могли порушити бізнес-інваріант), а представити недавню копію стану сукупності.
Тож, як правило, я очікую, що це запит проти каталогу продуктів, а інший - проти Інвентаря, і щось, щоб скласти їх у DTO, що вам потрібно для підтримки представлення даних.
Завантажити як домен Product, так і агрегати домену Inventory?
Так що це близько . Нам не потрібно завантажувати агрегати, тому що ми нічого не будемо міняти. Але нам потрібна їх держава; щоб ми могли це завантажити. Зважаючи на це, я зазвичай очікую, що два домени будуть працювати в різних процесах. Тому ми б дзвонили обом, не завантажуючи обох.
Чи хочете ви зберегти деякі властивості об’єкта домену продукту для кількості на складі та видання на складі, а потім використати події домену, щоб оновити їх, коли оновлення об’єкта "Інвентар" буде оновлено?
"Не перетинайте потоки. Це було б погано".
Використання подій для координації інформації в контекстах домену: чудова ідея. Перетіснення понять, що належать з одного домену, в інший: навпроти чудової ідеї, крім того більше.
Ви хочете зберегти домени чистими. У додатках, які взаємодіють з доменами, це не так важливо. Так, наприклад, для програми "Інвентар" доцільно викликати службу в додатку для продукту, щоб запитувати деякі конкретні поняття для продукту, які слід додати до представлення. Або навпаки.
Я не знаю жодної причини, що одну програму потрібно обмежити лише одним доменом. Поки є єдине джерело істини, ви можете розподіляти транзакції будь-яким способом.
Але для того, щоб подумати про це, у наведеному вище прикладі ми б закінчилися потенційно 2 таблицями БД для каталогу продуктів та інвентаризації продукції. Тепер ми використовуємо той самий ідентифікатор у них, оскільки це той самий продукт.
Це був би простий шлях. Якщо говорити більше, ви використовуєте той самий ідентифікатор, оскільки реальна сутність є однаковою; два різні обмежені контексти моделюють цю сутність по-різному, але модель не є сутністю реального світу.
Якщо це не працює, вам знадобиться запит, який можна використати для усунення розриву. Я думаю, що найпоширенішим варіантом цього є те, що новіша сутність зберігає ідентифікацію старого об'єкта. Ви побачите це також і в межах одного БЦ: заявники, коли їх затвердять, стають клієнтами. Це інша сукупність (стан, пов'язаний з клієнтом, підпорядковується іншому інваріанту, ніж стан заявника); тому, якщо ваш шар стійкості використовує потоки подій, потоку для нового сукупності знадобиться інший ідентифікатор. Тож десь буде держава, яка говорить: "цей заявник став цим клієнтом".
Або ми можемо використати для таблиці 1 рядок та 1 рядок таблиці та просто зіставити відповідні дані на сукупні властивості?
ЙІК! Ні, не робіть цього. Ви додаєте суперечку щодо транзакцій без будь-якої ділової причини для цього.