Стратегічне проєктування в DDD починається не з коду, а з питання: які частини бізнесу справді важливі і куди вкладати найкращі сили.
Предметну область ділять на піддомени трьох типів:
1. Основний (core) піддомен - те, що відрізняє бізнес від конкурентів і заробляє гроші. Для сервісу пошуку роботи - алгоритм підбору вакансій і якість даних про них; для маркетплейсу - ціноутворення й рекомендації.
- сюди - найкращі розробники і найретельніше моделювання;
- писати самим: готове рішення означає мати те саме, що й конкуренти;
- тут DDD приносить найбільше користі.
2. Допоміжний (supporting) піддомен - потрібен бізнесу, специфічний для нього, але не дає конкурентної переваги: внутрішня адмінка модерації, звіти для менеджерів.
- писати самим, але простіше - без складного моделювання, CRUD цілком підходить;
- можна доручити менш досвідченій команді чи підряднику.
3. Загальний (generic) піддомен - однаковий для більшості бізнесів: автентифікація, платежі, розсилки, бухгалтерія, пошук, зберігання файлів.
- купувати чи брати готове: Stripe/LiqPay, Mailgun, Meilisearch, Laravel Fortify, готові CRM;
- писати самим - марнування ресурсів і ризик зробити гірше, ніж готовий продукт.
Як це впливає на архітектуру:
- межі контекстів часто проходять по межах піддоменів;
- антикорупційні шари - навколо загальних піддоменів, щоб модель постачальника не просочувалася в основний;
- інвестиції в якість (тести, рефакторинг, ретельний дизайн) - насамперед в основний піддомен.
Типові помилки:
- писати загальні речі самостійно («зробимо свою систему розсилок») - роки роботи над тим, що не дає переваги;
- купувати основний піддомен - віддати ключову перевагу в чужі руки й обмеження чужого продукту;
- однаковий рівень ретельності для всього - складна DDD-модель у CRUD-адмінці й поспіх в основній логіці.
Класифікація змінюється з часом: унікальна функція стає загальною, коли ринок наздоганяє; загальна може стати основною, якщо бізнес вирішує конкурувати саме в ній.
Для співбесіди: уміння пояснити, що в конкретному проєкті є основним піддоменом, - показник розуміння бізнесу, а не лише технологій.