Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке model у контексті DDD?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)У контексті **Domain-Driven Design (DDD)** термін **model** означає спрощене, але точне представлення предметної області (domain) - абстракцію реального світу бізнесу, виражену в коді та мові команди. **Ключове:** модель не просто зберігає дані, вона описує поведінку предметного світу, тому саме модель перетворює хаос вимог на структуровану систему понять.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняУ контексті **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 починається там, де код перестає бути "про дані" - і стає **про сенс, правила і рішення**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.