Ddd

Як осмислити складність предметної області

Обмежені контексти (Bounded Contexts), їх межі та зв

Як осмислити складність предметної області (Managing Domain Complexity)

Ключова ідея главиСкладні предметні області вимагають розбиття на менші, більш управляемі моделі. Обмежені контексти (Bounded Contexts) — це інструмент DDD для визначення меж, у яких діє конкретна Єдина мова і модель.

Вступ: Від мови до меж

У попередній главі ми вивчили Єдинумову (Ubiquitous Language) — спільну мову для опису предметної області. Але щоб Єдина мова була справді ефективною, потрібно визначити, де саме вона діє.

Уявіть, що ви плануєте подорож:

  • Для руху по місту вам потрібна карта метро
  • Для автомобільної поїздки — дорожня карта
  • Для морської навігації — навігаційна карта
  • Для польоту — аеронавігаційна карта
Аналогія з картамиКожна карта має свій контекст застосування. Карта метро марна для морської навігації. Так само Єдина мова в одному контексті може бути повністю непридатною в іншому.

Що ми вивчимо?

У цій главі ми дослідимо:

Крок 1: Що таке моделі?

Розберемо концепцію моделі та її призначення.

Крок 2: Обмежені контексти

Вивчимо, що таке Bounded Contexts і чому вони критично важливі.

Крок 3: Межі контекстів

Дізнаємося, як визначати межі Обмежених контекстів.

Крок 4: Обмежені контексти vs Піддомени

Розуміємо різницю та зв'язок між цими концепціями.


Що таке модель?

Перш ніж говорити про Обмежені контексти, потрібно зрозуміти, що таке модель.

Визначення: МодельМодель (Model) — це спрощене уявлення реальності, створене з конкретною метою. Модель фокусується на аспектах, що важливі для вирішення конкретної задачі, і ігнорує все інше.

Моделі в реальному світі

Розглянемо приклади моделей з різних сфер:

Карти

Авіаційна модель

Хімічна модель

Ключові властивості моделі

Loading diagram...
graph TD
    A[Модель НАДА має] --> B[Конкретну мету]
    A --> C[Межі застосування]
    A --> D[Спрощення реальності]

    B --> E[Вирішення конкретної задачі]
    C --> F[Контекст, де модель корисна]
    D --> G[Фокус на важливому]

    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#c8e6c9
    style D fill:#ffcdd2

:::

Важлива істинаМодель — це НЕ копія реального світу. Якщо намагатися змоделювати все, модель стає такою ж складною, як сам реальний світ, і втрачає свою цінність.

Моделі в програмуванні

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

Приклад: Модель "Замовлення" в електронній комерції

// Модель Замовлення
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 перейти до Обмежених контекстів.

Визначення: Обмежений контекстОбмежений контекст (Bounded Context) — це межа, у якій діє конкретна модель предметної області та її Єдина мова. Усередині цієї межі всі терміни, концепції та правила мають чітке, узгоджене значення.

Чому потрібні обмежені контексти?

Розглянемо приклад, який ілюструє проблему:

::

Рішення: Розділити на Обмежені контексти

Замість однієї складної моделі створюємо три Обмежені контексти:

Loading diagram...
graph LR
    A[Авіакомпанія] --> B[Контекст Продажів]
    A --> C[Контекст Операцій]
    A --> D[Контекст Фінансів]

    B --> E[SalesTicket]
    C --> F[FlightTicket]
    D --> G[FinancialTransaction]

    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#c8e6c9
    style D fill:#ffcdd2

    E -.Ціна, Знижки.-> E
    F -.Місце, Багаж.-> F
    G -.Оплата, Податки.-> G

:::

Тепер кожен контекст має свою чітку модель квитка:

  • SalesTicket у контексті продажів
  • FlightTicket у контексті операцій
  • FinancialTransaction у контексті фінансів

Межі узгодженості

Обмежені контексти визначають межі узгодженості Єдиної мови.

Ключовий принципТермінологія, принципи та бізнес-правила Єдиної мови узгоджені тільки всередині Обмеженого контексту. За його межами ті самі слова можуть мати інше значення.
Loading diagram...
graph TB
    subgraph BC1[" Обмежений контекст: Продажі"]
        A1[Customer = Покупець]
        A2[Order = Замовлення]
        A3[Price = Ціна продажу]
    end

    subgraph BC2["Обмежений контекст: Логістика"]
        B1[Customer = Одержувач]
        B2[Shipment = Відвантаження]
        B3[Price = Вартість доставки]
     end

    style BC1 fill:#e3f2fd
    style BC2 fill:#fff3e0

:::

У контексті Продажів "Customer" — це покупець, у контексті Логістики — одержувач посилки. Обидва значення правильні у своїх контекстах!


Уточнення терміна "Єдина мова"

Обмежені контексти дозволяють завершити визначення Єдиної мови.

Важливе уточненняЄдина мова НЕ є "єдиною" в тому сенсі, що вона використовується всюди в організації. Єдина мова НЕ є універсальною.

Єдина моваєдина застосовна лише в межах свого Обмеженого контексту. Вона орієнтована на опис тільки тієї моделі, що знаходиться в цьому контексті.

Правильне розуміння"Ubiquitous" означає "повсюдний усередині контексту", а не "єдиний для всієї компанії".Для кожного Обмеженого контексту існує своя Єдина мова.

Визначення меж Обмеженого контексту

Як визначити, де має проходити межа Обмеженого контексту?

Відправна точка: Непротиворечність Єдиної мови

Найширша можлива межа Обмеженого контексту визначається непротиворечністю Єдиної мови.

Правило 1: Не ширше за узгодженість

Межа не може бути ширшою, ніж зона узгодженості термінології. Якщо терміни суперечать один одному — потрібні окремі контексти.

Правило 2: Але можна вужче

Навіть якщо термінологія узгоджена, можна створити менші контексти з організаційних або технічних причин.

Стратегічне рішення про розмір

Визначення розміру Обмеженого контексту — це стратегічне проектне рішення.

Великі контексти

Малі контексти

Баланс є ключемМоделі не обов'язково мають бути великими чи малими. Вони мають бути корисними. Розмір Обмеженого контексту має відповідати потребам бізнесу та організаційним обмеженням.

Причини для поділу на менші контексти

Чому ви можете захотіти розділити великий Обмежений контекст на менші?

Що уникати: Надмірне розділення

Небезпека над мірного поділуНЕ розділяйте пов'язану функціональність на кілька Обмежених контекстів!Ознаки надмірного поділу:
  • ❌ Одакові бізнес-вимоги впливають на кілька контекстів одночасно
  • ❌ Зміни вимагають синхронного розгортання кількох контекстів
  • ❌ Більшість часу йде на інтеграцію, а не на розробку
Емпіричне правилоВикористовуйте те саме правило, що й для піддоменів: виз начте набори пов'язаних сценаріїв використання (coherent use cases), які працюють з одними й тими самими даними, і уникайте їх розділення.

Порівняння Обмежених контекстів і піддоменів

Тепер розберемо ключову різницю та зв'язок між Піддоменами та Обмеженими контекстами.

Піддомени (Subdomains)

Піддомени: Аналіз бізнесуПіддомени виявляються, а не проектуються. Вони існують в реальному бізнесі незалежно від вашого програмного рішення.

Характеристики піддоменів:

  • Визначаються бізнес-стратегією
  • Це аналітична концепція
  • Ідентифікуються через анал із предметної області
  • Існують незалежно від реалізації
  • Типи: Core, Generic, Supporting

Обмежені контексти (Bounded Contexts)

Обмежені контексти: Проектне рішенняОбмежені контексти проектуються. Це рішення про те, як ви структуруєте своє програмне рішення.

Характеристики Обмежених контекстів:

  • Визначаються рішеннями проектування
  • Це концепція реалізації
  • Створюються розробниками та архітекторами
  • Можуть змінюватися залежно від потреб
  • Межі моделей і Єдиної мови

Порівняльна таблиця

АспектПіддоменОбмежений контекст
ПоходженняВиявляється (Discovery)Проектується (Design)
Хто визначаєБізнесРозробники/Архітектори
Що цеЧастина бізнес-стратегіїМежа моделі
Чому існуєБізнес-компетенціяТехнічне рішення
ЗмінністьРідко (разом з бізнесом)Може змінюватися
Тип классифікаціїCore/Generic/SupportingНемає типізації

Варіанти відображення

Як співвідносяться піддомени та Обмежені контексти?

Варіант 1: Один контекст на всю предметну Область (антипатерн для великих систем)

Коли це працює: Лише для дуже малих системПроблема: Одна велика модель стає надто складною для підтримки

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

Коли це працює: Коли експерти мають різні ментальні моделіІдея: Розділити там, де є конфлікти в термінології

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

Коли це працює: Найпоширеніший варіант для середніх та великих системІдея: Кожен піддомен має свій Обмежений контекст

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

Коли це працює: Коли потрібні різні моделі для різних задачПриклад: Для піддомену "Продукти" можуть бути контексти:
  • Контекст Каталогу (для перегляду)
  • Контекст Ціноутворення (для розрахунків)
  • Контекст Інвентаризації (для управління запасами)

Ключова фраза для запам'ятовування

Критично важливо пам'ятати

"Піддомени виявляються, Обмежені контексти проектуються."

Піддомени визначаються бізнес-стратегією. Програмне рішення та його Обмежені контексти можуть бути спроектовані з урахуванням конкретного проєкту та обмежень.

Резюме та ключові думки

У цій главі ми вивчили, як керувати складністю предметної області через Обмежені контексти.

Ключові висновки
  1. Модель — це спрощення реальності для вирішення конкретної задачі
  2. Обмежений контекст — це межа, у якій діє конкретна модель і Єдина мова
  3. Єдина мова є "єдиною" лише всередині свого Обмеженого контексту
  4. Розмір контексту — це стратегічне рішення, яке балансує між узгодженістю та складністю інтеграції
  5. Піддомени виявляються (бізнес), Обмежені контексти проектуються (розробка)
  6. Співвідношення між піддоменами та контекстами може бути різним залежно від потреб

Зв'язок з практикою

Розуміння Обмежених контекстів є фундаментальним для:

  • Архітектури мікросервісів: Кожен мікросервіс зазвичай відповідає Обмеженому контексту
  • Командної структури: Команди часто організовуються навколо Обмежених контекстів
  • Управління складністю: Обмежені контексти дозволяють розбити монолік на керовані частини
Наступні крокиТепер, коли ви розумієте основи DDD — піддомени, Єдину мову та Обмежені контексти — ви готові до вивчення більш поглиблених тем:
  • Патерни інтеграції між Обмеженими контекстами
  • Тактичне проектування всередині контексту
  • Агрегати, Entities, Value Objects
  • Domain Events та CQRS
Copyright © 2026