Ddd

Аналіз предметної області

Розуміння предметної області, типи піддоменів та їх класифікація в Domain-Driven Design

Аналіз предметної області (Domain Analysis)

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

Вступ: Чому аналіз предметної області є критично важливим?

Уявіть, що ви архітектор, якому доручили спроектувати будівлю. Перше питання, яке ви поставите: "Для чого ця будівля? Лікарня? Школа? Торговий центр?" Кожна з цих будівель матиме різну архітектуру, оскільки вирішує різні задачі.

Так само і з програмним забезпеченням. Предметно-орієнтоване проектування (Domain-Driven Design, DDD) — це підхід до розробки складних систем, який ставить бізнес-логіку в центр уваги. Замість того, щоб починати з технічних рішень, DDD пропонує спочатку зрозуміти предметну область (Domain) — сферу діяльності, в якій працює бізнес.

Найпоширеніша помилкаБагато команд розробників починають з технічних рішень ("Ми будемо використовувати мікросервіси!", "Потрібна реляційна база даних!"), не розібравшись спершу в бізнес-потребах. Це призводить до створення систем, які технічно досконалі, але не вирішують реальних бізнес-проблем.

Що ми вивчимо в цій главі?

У цій главі ми розглянемо:

  • Що таке предметна область і чому її розуміння є фундаментом успішної розробки
  • Піддомени (Subdomains) — як розбити складну систему на керовані частини
  • Три типи піддоменів: основні, універсальні та допоміжні
  • Як визначати межі піддоменів і коли зупинятися в деталізації
  • Практичні приклади аналізу реальних систем
Педагогічний підхідЦей матеріал побудований за принципом "Чому → Що → Як":
  • Спочатку ми з'ясуємо, чому потрібен аналіз предметної області
  • Потім визначимо, що таке піддомени та їх типи
  • І нарешті, дізнаємося, як їх виявляти та класифікувати
Кожна концепція супроводжується практичними прикладами з реального світу, щоб ви могли застосувати знання у своїх проєктах.

Що таке предметна область?

Предметна область (Domain) — це сфера знань, діяльності або впливу, в якій працює організація. Це не просто "те, що робить компанія", а цілісна система бізнес-процесів, правил, знань та цілей.

Приклади предметних областей

Розглянемо кілька прикладів, щоб краще зрозуміти концепцію:

Starbucks

Uber

Amazon

Зв'язок з бізнес-цілями

Предметна область завжди пов'язана зі стратегічними цілями компанії. Кожна компанія має свою унікальну мету:

  • Starbucks прагне створити "третє місце" між домом та роботою, де люди насолоджуються якісною кавою
  • Uber хоче зробити пересування в містах простішим та доступнішим
  • Amazon намагається бути "найбільш клієнтоорієнтованою компанією світу"
Loading diagram...
graph TB
A[Бізнес-цілі] --> B[Предметна область]
B --> C[Операційні процеси]
C --> D[Програмне забезпечення]

    style A fill:#e1f5ff
    style B fill:#fff59d
    style D fill:#c8e6c9

    A -.Визначають.-> B
    B -.Формує.-> C
    C -.Вимагає.-> D

Програмне забезпечення має підтримувати предметну область у досягненні бізнес-цілей. Саме тому розуміння предметної області є першим кроком у розробці ефективних систем.


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

Навіть невелика компанія має складну предметну область. Спроба охопити всю предметну область одночасно призведе до когнітивного перевантаження. Тому DDD пропонує розбити предметну область на піддомени (Subdomains) — менші, більш зрозумілі частини.

Що таке піддомен?

Визначення: ПіддоменПіддомен (Subdomain) — це частина предметної області, яка відповідає за конкретну бізнес-компетенцію або функцію. Кожен піддомен має власну логіку, правила та цілі.

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

Приклад: Електронна комерція

Розглянемо інтернет-магазин. Його предметна область може включати такі піддомени:

Loading diagram...
graph LR
A[Електронна комерція] --> B[Каталог товарів]
A --> C[Управління замовленнями]
A --> D[Оплата]
A --> E[Доставка]
A --> F[Управління клієнтами]
A --> G[Аналітика та звітність]

    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#fff3e0
    style D fill:#fff3e0
    style E fill:#fff3e0
    style F fill:#fff3e0
    style G fill:#fff3e0

Кожен з цих піддоменів має власну логіку:

  • Каталог товарів: організація, пошук, фільтрація продуктів
  • Управління замовленнями: створення, обробка, скасування замовлень
  • Оплата: прийом платежів, повернення коштів
  • Доставка: розрахунок вартості, відстеження посилок
  • Управління клієнтами: реєстрація, профілі, історія покупок

Роль піддоменів у розробці

Піддомени допомагають у:

  1. Розподілі відповідальності: Кожна команда може працювати над окремим піддоменом
  2. Пріоритезації: Не всі піддомени однаково важливі для бізнесу
  3. Масштабуванні: Різні піддомени можуть розвиватися незалежно
  4. Комунікації: Легше обговорювати конкретні частини системи
Ключовий принципПіддомени виявляються через аналіз бізнесу, а не проектуються розробниками. Ваше завдання — зрозуміти, які піддомени існують у предметній області, а не вигадати їх.

Типи піддоменів: Стратегічна класифікація

Не всі піддомени однаково важливі для бізнесу. DDD пропонує класифікувати піддомени на три типи залежно від їхньої стратегічної цінності та складності:

  1. Основні піддомени (Core Subdomains)
  2. Універсальні піддомени (Generic Subdomains)
  3. Допоміжні піддомени (Supporting Subdomains)

Ця класифікація допомагає визначити, куди вкладати ресурси та як розподіляти зусилля команди.

Loading diagram...
graph TD
A{Піддомен} --> B{Джерело конкурентної переваги?}
B -->|Так| C[Основний піддомен<br/>Core Subdomain]
B -->|Ні| D{Унікальний для бізнесу?}
D -->|Так| E[Допоміжний піддомен<br/>Supporting Subdomain]
D -->|Ні| F[Універсальний піддомен<br/>Generic Subdomain]

    style C fill:#ffcdd2
    style E fill:#fff9c4
    style F fill:#c8e6c9

Основний піддомен (Core Subdomain)

Визначення: Основний піддоменОсновний піддомен (Core Subdomain) — це та частина предметної області, яка робить бізнес унікальним і надає конкурентну перевагу. Це серце вашої системи, те, що відрізняє вас від конкурентів.

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

АспектОпис
Бізнес-диференціаціяВисокаякість: це те, що робить компанію унікальною
СкладністьВисока: містить складну бізнес-логіку та правила
МінливістьВисока: часто змінюється разом зі стратегією
Конкурентна перевагаПряма: успіх бізнесу безпосередньо залежить від цього піддомену
Стратегія рішенняРозробка власного рішення найкращими фахівцями

Приклади основних піддоменів

Uber: Алгоритм підбору

Google: Алгоритм пошуку

Amazon: Система рекомендацій

Стратегія для основних піддоменів

Критична важливістьОсновний піддомен НЕ МОЖНА передавати на аутсорсинг або використовувати готові рішення! Це ваша конкурентна перевага, і вона має бути розроблена власними силами з максимальною увагою до деталей.

Рекомендації:

  • Виділіть найкращих розробників для роботи над основним піддоменом
  • Інвестуйте в глибоке вивчення предметної області
  • Застосовуйте передові практики проектування (DDD, CQRS, Event Sourcing)
  • Регулярно рефакторьте та вдосконалюйте код
  • Підтримуйте тісну співпрацю з експертами предметної області

Універсальний піддомен (Generic Subdomain)

Визначення: Універсальний піддоменУніверсальний піддомен (Generic Subdomain) — це бізнес-компетенція, яка потрібна для роботи системи, але не є унікальною для вашого бізнесу. Такі проблеми вже вирішені іншими компаніями, і існують готові рішення.

Характеристики універсального піддомену

АспектОпис
Бізнес-диференціаціяВідсутня: всі компанії вирішують ці задачі однаково
СкладністьРізна: може бути як простою, так і складною
МінливістьНизька: рідко змінюється

| | Конкурентна перевага | Немає: це "гігієнічний фактор", а не перевага | | Стратегія рішення | Використовувати готові рішення чи купити |

Приклади універсальних піддоменів

Аутентифікація та авторизація

Шифрування даних

Розсилка електронних листів

Стратегія для універсальних піддоменів

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

Рекомендації:

  • Використовуйте SaaS-рішення (Software as a Service)
  • Купуйте готові комерційні продукти
  • Використовуйте open-source бібліотеки та фреймворки
  • Розглядайте аутсорсинг для простих універсальних піддоменів
  • Мінімізуйте кастомізацію готових рішень

Допоміжний піддомен (Supporting Subdomain)

Визначення: Допоміжний піддоменДопоміжний піддомен (Supporting Subdomain) — це бізнес-компетенція, яка підтримує роботу основного піддомену, але не надає конкурентної переваги і є специфічною для вашого бізнесу.

Характеристики допоміжного піддомену

АспектОпис
Бізнес-диференціаціяНизька: допомагає, але не відрізняє від конкурентів
СкладністьНизька до середньої: зазвичай прості CRUD-операції
МінливістьСередня: змінюється рідше за основний піддомен
Конкурентна перевагаНепряма: необхідний, але не критичний
Стратегія рішенняПростота реалізації, мінімальні витрати

Приклади допоміжних піддоменів

Каталог контенту

Внутрішня звітність

Управління конфігурацією

ETL-процеси як допоміжні піддомени

Часто допоміжні піддомени включають ETL-процеси (Extract, Transform, Load) — операції витягування, трансформації та завантаження даних між системами.

Приклад: Інтеграція з бухгалтерською системою для передачі фінансових даних.

Стратегія для допоміжних піддоменів

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

Рекомендації:

  • Використовуйте прості архітектурні рішення
  • Розглядайте low-code/no-code платформи
  • Можна віддати на аутсорсинг junior-розробникам
  • Мінімізуйте складність — простота понад усе
  • Якщо можливо, використовуйте готові open-source рішення
Copyright © 2026