Як осмислити складність предметної області
Як осмислити складність предметної області (Managing Domain Complexity)
Вступ: Від мови до меж
У попередній главі ми вивчили Єдинумову (Ubiquitous Language) — спільну мову для опису предметної області. Але щоб Єдина мова була справді ефективною, потрібно визначити, де саме вона діє.
Уявіть, що ви плануєте подорож:
- Для руху по місту вам потрібна карта метро
- Для автомобільної поїздки — дорожня карта
- Для морської навігації — навігаційна карта
- Для польоту — аеронавігаційна карта
Що ми вивчимо?
У цій главі ми дослідимо:
Крок 1: Що таке моделі?
Розберемо концепцію моделі та її призначення.
Крок 2: Обмежені контексти
Вивчимо, що таке Bounded Contexts і чому вони критично важливі.
Крок 3: Межі контекстів
Дізнаємося, як визначати межі Обмежених контекстів.
Крок 4: Обмежені контексти vs Піддомени
Розуміємо різницю та зв'язок між цими концепціями.
Що таке модель?
Перш ніж говорити про Обмежені контексти, потрібно зрозуміти, що таке модель.
Моделі в реальному світі
Розглянемо приклади моделей з різних сфер:
Карти
Авіаційна модель
Хімічна модель
Ключові властивості моделі
Моделі в програмуванні
У контексті програмного забезпечення модель предметної області — це структурований спосіб представлення бізнес-концепцій, правил та процесів.
Приклад: Модель "Замовлення" в електронній комерції
// Модель Замовлення
public class Order {
public OrderId Id { get; private set; }
public CustomerId CustomerId { get; private set; }
public List<OrderItem> Items { get; private set; }
public OrderStatus Status { get; private set; }
public Money TotalAmount { get; private set; }
public void AddItem(Product product, int quantity) {
// Бізнес-логіка додавання товару
}
public void Confirm() {
// Бізнес-логіка підтвердження
}
}
Ця модель:
- Включає: ID, товари, статус, загальну суму, операції (додати товар, підтвердити)
- Ігнорує: Деталі доставки (це інша модель), історію змін статусу, технічні деталі зберігання
Обмежені контексти (Bounded Contexts)
Тепер, коли ми розуміємо, що таке модель, can перейти до Обмежених контекстів.
Чому потрібні обмежені контексти?
Розглянемо приклад, який ілюструє проблему:
Уявіть систему для авіакомпанії. Термін "Ticket" (Квиток) має різне значення для різних експертів:
Для відділу продажів:
- Квиток — це те, що купує клієнт
- Включає: ціну, знижки, умови повернення
- Операції: купити, повернути, обміняти
Для відділу польотів:
- Квиток — це право пасажира на політ
- Включає: номер місця, багаж, статус реєстрації
- Операції: зареєструватись, змінити місце
Для бухгалтерії:
- Квиток — це фінансова транзакція
- Включає: суму оплати, податки, комісії
- Операції: провести оплату, зробити повернення
Спроба створити одну модель "Ticket" призведе до:
- Надмірної складності
- Суперечливих правил
- Плутанини в командах
Рішення: Розділити на Обмежені контексти
Замість однієї складної моделі створюємо три Обмежені контексти:
Тепер кожен контекст має свою чітку модель квитка:
SalesTicketу контексті продажівFlightTicketу контексті операційFinancialTransactionу контексті фінансів
Межі узгодженості
Обмежені контексти визначають межі узгодженості Єдиної мови.
У контексті Продажів "Customer" — це покупець, у контексті Логістики — одержувач посилки. Обидва значення правильні у своїх контекстах!
Уточнення терміна "Єдина мова"
Обмежені контексти дозволяють завершити визначення Єдиної мови.
Єдина моваєдина застосовна лише в межах свого Обмеженого контексту. Вона орієнтована на опис тільки тієї моделі, що знаходиться в цьому контексті.
Визначення меж Обмеженого контексту
Як визначити, де має проходити межа Обмеженого контексту?
Відправна точка: Непротиворечність Єдиної мови
Найширша можлива межа Обмеженого контексту визначається непротиворечністю Єдиної мови.
Правило 1: Не ширше за узгодженість
Межа не може бути ширшою, ніж зона узгодженості термінології. Якщо терміни суперечать один одному — потрібні окремі контексти.
Правило 2: Але можна вужче
Навіть якщо термінологія узгоджена, можна створити менші контексти з організаційних або технічних причин.

Стратегічне рішення про розмір
Визначення розміру Обмеженого контексту — це стратегічне проектне рішення.
Великі контексти
Малі контексти
Причини для поділу на менші контексти
Чому ви можете захотіти розділити великий Обмежений контекст на менші?
- Нові команди розробників
- Різна експертиза (frontend, backend, ML)
- Географічний розподіл команд
- Різні життєві цикли розробки
- Різні вимоги до масштабування
- Різні технологічні стеки
- Різний темп змін
- Різні SLA (Service Level Agreement)
- Різні вимоги до безпеки
Що уникати: Надмірне розділення
- ❌ Одакові бізнес-вимоги впливають на кілька контекстів одночасно
- ❌ Зміни вимагають синхронного розгортання кількох контекстів
- ❌ Більшість часу йде на інтеграцію, а не на розробку
Порівняння Обмежених контекстів і піддоменів
Тепер розберемо ключову різницю та зв'язок між Піддоменами та Обмеженими контекстами.
Піддомени (Subdomains)
Характеристики піддоменів:
- Визначаються бізнес-стратегією
- Це аналітична концепція
- Ідентифікуються через анал із предметної області
- Існують незалежно від реалізації
- Типи: Core, Generic, Supporting
Обмежені контексти (Bounded Contexts)
Характеристики Обмежених контекстів:
- Визначаються рішеннями проектування
- Це концепція реалізації
- Створюються розробниками та архітекторами
- Можуть змінюватися залежно від потреб
- Межі моделей і Єдиної мови
Порівняльна таблиця
| Аспект | Піддомен | Обмежений контекст |
|---|---|---|
| Походження | Виявляється (Discovery) | Проектується (Design) |
| Хто визначає | Бізнес | Розробники/Архітектори |
| Що це | Частина бізнес-стратегії | Межа моделі |
| Чому існує | Бізнес-компетенція | Технічне рішення |
| Змінність | Рідко (разом з бізнесом) | Може змінюватися |
| Тип классифікації | Core/Generic/Supporting | Немає типізації |
Варіанти відображення
Як співвідносяться піддомени та Обмежені контексти?
Варіант 1: Один контекст на всю предметну Область (антипатерн для великих систем)

Варіант 2: Контексти відповідають непротиворечності моделі

Варіант 3: Один контекст на кожен піддомен

Варіант 4: Кілька контекстів на один піддомен
- Контекст Каталогу (для перегляду)
- Контекст Ціноутворення (для розрахунків)
- Контекст Інвентаризації (для управління запасами)
Ключова фраза для запам'ятовування
Піддомени визначаються бізнес-стратегією. Програмне рішення та його Обмежені контексти можуть бути спроектовані з урахуванням конкретного проєкту та обмежень."Піддомени виявляються, Обмежені контексти проектуються."
Резюме та ключові думки
У цій главі ми вивчили, як керувати складністю предметної області через Обмежені контексти.
- Модель — це спрощення реальності для вирішення конкретної задачі
- Обмежений контекст — це межа, у якій діє конкретна модель і Єдина мова
- Єдина мова є "єдиною" лише всередині свого Обмеженого контексту
- Розмір контексту — це стратегічне рішення, яке балансує між узгодженістю та складністю інтеграції
- Піддомени виявляються (бізнес), Обмежені контексти проектуються (розробка)
- Співвідношення між піддоменами та контекстами може бути різним залежно від потреб
Зв'язок з практикою
Розуміння Обмежених контекстів є фундаментальним для:
- Архітектури мікросервісів: Кожен мікросервіс зазвичай відповідає Обмеженому контексту
- Командної структури: Команди часто організовуються навколо Обмежених контекстів
- Управління складністю: Обмежені контексти дозволяють розбити монолік на керовані частини
- Патерни інтеграції між Обмеженими контекстами
- Тактичне проектування всередині контексту
- Агрегати, Entities, Value Objects
- Domain Events та CQRS