DDD

Експертні знання про предметну область

Виявлення експертних знань, єдина мова (Ubiquitous Language) та моделювання предметної області в DDD

Експертні знання про предметну область (Domain Expert Knowledge)

Епіграф

"У продакшн потрапляють не знання експертів з предметної області, а припущення розробників..."

— Альберто Брандоліні (Alberto Brandolini)

Вступ: Від структури до змісту

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

Але знання про структуру — це лише початок. Тепер нам потрібно зануритися усередину кожного піддомену і зрозуміти:

  • Які бізнес-функції він виконує?
  • Яка логіка стоїть за цими функціями?
  • Як експерти предметної області думають про проблему?
  • Яку термінологію вони використовують?
Мета главиУ цій главі ми вивчимо Єдину мову (Ubiquitous Language) — інструмент DDD для ефективної комунікації та обміну знаннями між експертами предметної області та розробниками. Це не просто термінологічний словник, а спосіб мислення, який забезпечує глибоке розуміння бізнесу.

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

Крок 1: Бізнес-задачі

Зрозуміємо, що таке бізнес-задачі та чому їх розуміння критично важливе.

Крок 2: Виявлення експертних знань

Дізнаємося, як ефективно отримувати знання від експертів предметної області.

Крок 3: Проблеми комунікації

Розглянемо типові проблеми спілкування в проєктах та їхні наслідки.

Крок 4: Єдина мова

Вивчимо концепцію Ubiquitous Language і як її створювати.

Крок 5: Моделювання

Дізнаємося, що таке бізнес-модель та як її будувати.


Бізнес-задачі (Business Problems)

Перше, що потрібно зрозуміти: програмне забезпечення існує для вирішення бізнес-задач. Але що ми маємо на увазі під "бізнес-задачею"?

Бізнес-задача ≠ Математична задача

Розбиваємо міфБізнес-задача — це НЕ математична задача або загадка з єдиним правильним рішенням. У бізнесі немає "остаточного рішення". Бізнес постійно еволюціонує, і рішення мають адаптуватися разом з ним.

Бізнес-задачі можуть включати:

  • Оптимізацію робочих процесів
  • Мінімізацію ручної праці
  • Управління ресурсами
  • Підтримку прийняття рішень
  • Управління даними
  • Автоматизацію повторюваних операцій
  • Покращення досвіду клієнтів

Два рівні бізнес-задач

Loading diagram...
graph TB
A[Бізнес-задачі] --> B[Рівень предметної області]
A --> C[Рівень піддомену]

    B --> D[Глобальна мета компанії]
    C --> E[Конкретна бізнес-компетенція]

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

    D -.Приклад.-> F[FedEx: швидка доставка посилок]
    E -.Приклад.-> G[Оптимізація маршрутів]
    E -.Приклад.-> H[Відстеження посилок]

1. Рівень предметної області (Domain Level)

Це глобальна мета компанії — проблема, яку вона вирішує для своїх клієнтів.

Приклад: FedEx

  • Проблема клієнта: Потрібно терміново відправити посилку
  • Рішення FedEx: Швидка та надійна доставка по всьому світу
  • Цінність: Клієнт може довіритияти, що посилка прибуде вчасно

2. Рівень піддомену (Subdomain Level)

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

Приклади піддоменів FedEx:

Управління логістикою

Відстеження посилок

Система розрахунків

Від задачі до рішення

Кожен піддомен має свій цикл "Задача → Рішення":

Loading diagram...
sequenceDiagram
participant B as Бізнес-задача
participant E as Експерт предметної області
participant D as Розробник
participant S as Програмне рішення

    B->>E: Визначає вимоги
    E->>D: Передає знання
    D->>S: Реалізує функціональність
    S->>B: Вирішує задачу

    B-->>E: Нові вимоги (еволюція)
    E-->>D: Нові знання
    D-->>S: Покращення
Ключовий інсайтРозуміння бізнес-задачі — це не просто знання "що потрібно зробити", а розуміння "чому це потрібно" та "як це впливає на бізнес". Без цього розуміння розробники створюють технічно правильні, але бізнесово неефективні рішення.

Виявлення експертних знань

Тепер, коли ми розуміємо природу бізнес-задач, виникає питання: звідки розробники отримують знання для їх вирішення?

Експерти предметної області (Domain Experts)

Визначення: Експерт предметної областіЕксперт предметної області (Domain Expert) — це людина, чия робота полягає в набутті конкретних знань і вмінні розбиратися в усіх тонкощах обраного напряму. Ці люди живуть і дихають своєю предметною областю.

Приклади експертів:

  • У банку: андеррайтери, трейдери, кредитні аналітики
  • У медицині: лікарі, медсестри, фармацевти
  • В електронній комерції: мерчандайзери, маркетологи, спеціалісти з логістики
  • У страхуванні: актуарії, агенти, оцінювачі ризиків

Розробники ≠ Експерти предметної області

Важливо розумітиРозробники не повинні і не можуть ставати експертами в предметній області. Це не їхня роль і не їхня мета.Але! Розробники повинні:
  • ✅ Розуміти, як думають експерти
  • ✅ Використовувати термінологію експертів
  • ✅ Розуміти ментальну модель експертів
  • ✅ Задавати правильні питання

Ментальна модель експерта

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

Loading diagram...
graph LR
A[Експерт предметної області] -.Має.-> B[Ментальна модель]
B --> C[Концепції]
B --> D[Відносини між концепціями]
B --> E[Правила та обмеження]
B --> F[Бізнес-процеси]

    G[Розробник] -.Вивчає.-> B
    G --> H[Програмна модель]
    H -.Відображає.-> B

    style A fill:#ffe0b2
    style G fill:#bbdefb
    style B fill:#c8e6c9
    style H fill:#fff9c4

Небезпека поверхневого розуміння

Що станеться, якщо розробник не розуміє бізнес-задачу глибоко?

Мудрість Альберто Брандоліні

Альберто Брандоліні (Alberto Brandolini), творець методу Event Storming, висловив глибоку думку:

Цитата

"Розробка програмного забезпечення — це процес навчання, а робочий код є побічним ефектом."

— Альберто Брандоліні

Успіх програмного проєкту залежить від ефективності обміну знаннями між експертами предметної області та розробниками. Щоб вирішити задачу, потрібно зрозуміти її суть.


Проблеми комунікації

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

Типова структура команди

Майже всі програмні проєкти вимагають співпраці різних ролей:

Loading diagram...
graph TD
A[Програмний проєкт] --> B[Експерти предметної області]
A --> C[Власники продукту]
A --> D[Розробники]
A --> E[Дизайнери UI/UX]
A --> F[Менеджери проєктів]
A --> G[Тестувальники]
A --> H[Аналітики]
A --> I[Інші спеціалісти]

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

Результат залежить від того, наскільки продуктивно всі ці сторони можуть працювати разом. Критичні питання:

  • Чи згодні всі з тим, яку задачу потрібно вирішити?
  • Чи немає протиріч у функціональних та нефункціональних вимогах?
  • Чи розуміють всі однаково ключові концепції?

Традиційний потік знань (антипатерн)

Дослідження показують, що найчастішою причиною невдач у програмних проєктах є неефективна комунікація. Чому?

Проблема: ПосередникиУ традиційному підході експерти предметної області та розробники не мають прямого контакту. Знання передаються через "перекладачів":
  • Бізнес-аналітиків
  • Системних аналітиків
  • Власників продукту
  • Менеджерів проєктів

Потік знань у традиційній моделі

Loading diagram...
graph LR
A[Експерт предметної області] -->|Знання| B[Аналітик]
B -->|Вимоги| C[Менеджер проєкту]
C -->|Специфікація| D[Розробник]
D -->|Код| E[Продукт]

    style A fill:#ffcdd2
    style B fill:#fff59d
    style C fill:#80cbc4
    style D fill:#90caf9
    style E fill:#c5e1a5

    A -.Втрата інформації.-> B
    B -.Спотворення.-> C
    C -.Неповнота.-> D

Множинні перекла дання

Знання у традиційному підході піддаються кількатакратному перекладу:

Переклад 1: Знання → Аналітична модель

Експерт пояснює свої знання аналітику, який створює документ вимог.

Переклад 2: Аналітична модель → Дизайн

Архітектор або дизайнер перетворює вимоги в дизайн системи.

Переклад 3: Дизайн → Код

Розробник реалізує дизайн у вигляді програмного коду.

Переклад 4: Код → Знання (для підтримки)

Наступні розробники вивчають код, щоб зрозуміти предметну область.

Гра "Зіпсований телефон"

АналогіяЦей процес нагадує дитячу гру "Зіпсований телефон" (Telephone Game):
  1. Перший гравець вигадує повідомлення
  2. Нашіптує його другому
  3. Другий повторює третьому
  4. І так далі...
  5. Останній гравець озвучує те, що почув
Результат: Фінальне повідомлення суттєво відрізняється від оригінального!

Наслідки поганої комунікації

Що відбувається через множинні перекладання?

Спотворення інформації

Неправильні рішення

Невдалі проєкти

Рішення: Пряма комунікація

DDD пропонує більш ефективний спосіб передачі знань від експертів до розробників: використання Єдиної мови (Ubiquitous Language) та пряме спілкування.

Наступний крокТепер, коли ми розуміємо проблему, давайте розглянемо рішення — концепцію Єдиної мови.
Copyright © 2026