Skip to main content

Що таке model у контексті DDD?

У контексті Domain-Driven Design (DDD) термін model означає спрощене, але точне представлення предметної області (domain) - тобто абстракцію реального світу бізнесу, виражену в коді та мові команди.

Це не просто "структура даних" - це жива концептуальна модель, яка описує, як влаштований бізнес і які в ньому діють правила.


1. Суть: що таке модель

Модель - це спосіб зрозуміти, пояснити і реалізувати поведінку предметної області в коді.

Вона відображає:

  • терміни бізнесу,
  • правила й обмеження,
  • взаємозв'язки між об'єктами,
  • реакції на події.

Саме модель перетворює "хаос вимог" на структуровану систему понять, з якими працює розробник.


2. Модель - це не дані, а сенс

Звичайний код зберігає дані (user_name, order_date). Модель же виражає сенс:

python
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, а як:

python
class Product: def reserve(self, quantity): if not self.in_stock(quantity): raise OutOfStock() self.stock -= quantity

Тут модель не просто зберігає поля, вона описує поведінку предметного світу.


Висновок:

  • Domain - це світ бізнесу (що реально відбувається).
  • Model - це зрозуміле і точне відображення цього світу в коді та мові команди.

DDD починається там, де код перестає бути "про дані" - і стає про сенс, правила і рішення.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.