Що таке model у контексті DDD?
У контексті Domain-Driven Design (DDD) термін model означає спрощене, але точне представлення предметної області (domain) - тобто абстракцію реального світу бізнесу, виражену в коді та мові команди.
Це не просто "структура даних" - це жива концептуальна модель, яка описує, як влаштований бізнес і які в ньому діють правила.
1. Суть: що таке модель
Модель - це спосіб зрозуміти, пояснити і реалізувати поведінку предметної області в коді.
Вона відображає:
- терміни бізнесу,
- правила й обмеження,
- взаємозв'язки між об'єктами,
- реакції на події.
Саме модель перетворює "хаос вимог" на структуровану систему понять, з якими працює розробник.
2. Модель - це не дані, а сенс
Звичайний код зберігає дані (user_name, order_date).
Модель же виражає сенс:
order.pay(amount)- не просто "записати оплату", а "реалізувати бізнес-дію оплати" з усіма правилами (не можна оплатити скасоване замовлення, не можна оплатити частково тощо).
3. З чого складається модель
DDD-модель реалізується через доменні будівельні блоки:
| Компонент | Роль у моделі |
|---|---|
| Entity (Сутність) | Представляє об'єкт з ідентичністю і життєвим циклом (Order, Customer). |
| Value Object (Об'єкт-значення) | Представляє характеристику без ідентичності (Money, Address). |
| Aggregate (Агрегат) | Група пов'язаних сутностей з логікою цілісності. |
| Domain Service | Поведінка, яка не належить одній сутності (PaymentService). |
| Domain Event | Факт, який стався в бізнесі (OrderCancelled). |
Усі ці елементи разом складають модель домену.
4. Модель - це ще й мова
DDD наголошує: модель живе не лише в коді, а й у розмові. Розробники, аналітики та експерти повинні використовувати єдиний словник (Ubiquitous Language). Тоді код стає прямим відображенням понять бізнесу.
5. Приклад
Бізнес каже:
«Якщо товар закінчився, замовлення повинно перейти в статус очікування постачання».
DDD-модель виражає це не як if count == 0,
а як:
class Product:
def reserve(self, quantity):
if not self.in_stock(quantity):
raise OutOfStock()
self.stock -= quantityТут модель не просто зберігає поля, вона описує поведінку предметного світу.
Висновок:
- Domain - це світ бізнесу (що реально відбувається).
- Model - це зрозуміле і точне відображення цього світу в коді та мові команди.
DDD починається там, де код перестає бути "про дані" - і стає про сенс, правила і рішення.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.