Влад Хононов

Что такое предметно-ориентированное проектирование?


(What is Domain-Driven Design?)

Глава 1
Анализ предметных областей
В этой главе вы изучите основные понятия предметно-ориентированного проектирования для анализа бизнеса компании: предметная область; основные, поддерживающие и обобщённые предметные подобласти; эксперты предметной области.
Что такое предметная область?
Предметная область (или бизнес-область, сфера бизнеса, business domain) определяет общую сферу деятельности компании. В общем смысле, это услуга, которую компания предоставляет своим клиентам. Например:

  • FedEx — курьерская доставка;
  • Starbucks — кофе;
  • Walmart — розничная торговля.
Компания может работать в нескольких предметных областях. Например, Amazon предоставляет как услуги розничной торговли, так и облачные сервисы. Uber — это компания по организации поездок, которая также предоставляет услуги по доставке еды и совместному использованию велосипедов.

Важно отметить, что компании часто меняют свои предметные области. Классическим примером здесь может служить Nokia, которая на протяжении своей жизни работала в таких областях как деревообработка, производство резины, телекоммуникации и мобильные устройства.
Что такое предметная подобласть?
Для достижения целей и задач своей области компания должна работать в нескольких предметных подобластях (subdomain). Предметная подобласть — это специализированная область деятельности. Предметную область компании — услугу, которую она предоставляет своим клиентам — образуют несколько предметных подобластей. Для достижения успеха компании не достаточно реализоваться только в одной подобласти.

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

С технической точки зрения предметные подобласти напоминают наборы взаимосвязанных способов применения (use cases). На рисунке 1-1 рассмотрим диаграмму способов применения для шлюза платежей с кредитной карты.

Рисунок 1-1. Диаграмма способов применения для подобласти «платежи с кредитной карты»
Эта диаграмма представляет собой связанный набор способов применения, действующих с одним и тем же набором акторов и бизнес-сущностей. Таким образом, все эти варианты использования формируют подобласть «платежи с кредитной карты».
Типы подобластей
В предметно-ориентированном проектировании выделяют три типа предметных подобластей: основные (core), обобщённые (generic) и поддерживающие (supporting). Давайте рассмотрим, чем они различаются с точки зрения стратегии компании.
Основные предметные подобласти
Основная предметная подобласть (core subdomain) — это то, что компания делает по-своему, отлично от конкурентов. Она может включать в себя создание новых продуктов или услуг или оптимизацию существующих процессов, позволяющую снижать затраты.

Возьмем Uber в качестве примера. Сначала компания предоставляла новый вид транспортных услуг — совместные поездки. Когда эту услугу стали предоставлять и конкуренты, компания нашла способы оптимизации и развития своего основного бизнеса: например, снижение затрат за счет подбора пассажиров, едущих в одном направлении.
Сложность и скорость изменений
Простая в реализации основная предметная подобласть позволяет получить лишь краткосрочное конкурентное преимущество. Поэтому основные подобласти обычно сложны. Основная сфера деятельности компании должна обладать высоким порогом входа — важно исключить возможность копирования или имитации решений конкурентами.

Основные подобласти подвержены частым изменениям. Инновации и непрерывное развитие основной подобласти должны стать частью стратегии компании. Их изменения заключаются в добавлении новых функций или оптимизации поведения и коэффициента окупаемости инвестиций для уже действующих. Так или иначе, постоянное развитие основного вида деятельности необходимо для того, чтобы компания опережала конкурентов.
Практические аспекты реализации
Основные подобласти должны воплощаться внутри компании. Их нельзя купить или адаптировать; это подорвало бы идею конкурентного преимущества, если бы все конкурирующие компании могли бы делать одно и то же.

Также неразумно было бы передавать реализацию основной предметной подобласти сторонней организации, ведь это стратегическая инвестиция. Пытаться искать легкие пути для основной подобласти рискованно не только для краткосрочной перспективы, но и для далекого будущего: например, появление неподдерживаемых кодовых баз, не способных обеспечить выполнение целей и задач компании. Поэтому к работе над основной подобластью нужно привлекать наиболее опытных специалистов внутри организации.

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

Рассмотрим, например, производителя ювелирных изделий, который продает свою продукцию онлайн. Онлайн-магазин важен, но это не основная подобласть. А вот дизайн ювелирных изделий — да. Компания может использовать готовый онлайн-магазин, но она не может отдать на аутсорс дизайн ювелирных изделий. Дизайн — это то, ради чего покупатели приобретают продукцию именно этого производителя.
Обобщённые предметные подобласти
Как и основные, обобщённые предметные подобласти (generic subdomains) обычно сложны и труднореализуемы. Однако обобщённые подобласти не предоставляют никакого конкурентного преимущества компании. Здесь нет необходимости в инновациях или оптимизации: проверенные временем решения широко доступны и все компании используют их. Другими словами, обобщённые предметные подобласти — это деловые процессы, которые все компании выполняют одним и тем же способом.

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

Практические аспекты реализации

Обобщённые предметные подобласти — это сложные, но уже решённые проблемы. Более выгодно купить готовый продукт или использовать открытое решение, чем вкладывать время и усилия в реализацию обобщённой подобласти внутри компании.

Поддерживающие подобласти

Как следует из названия, поддерживающие подобласти поддерживают бизнес компании. Тем не менее, в отличие от основных подобластей, они не предоставляют никакого конкурентного преимущества для компании. Они действительно только поддерживают.

Например, рассмотрим агентство онлайн-рекламы. Его основные предметные подобласти включают подбор рекламы для посетителей, оптимизацию её эффективности и минимизацию затрат на рекламные площадки. Тем не менее, чтобы добиться успеха в этих областях, компания должна каталогизировать свои креативные материалы. Способ управления наработками компании не влияет на прибыль и в нём нет ничего, что можно было бы изобрести или оптимизировать. С другой стороны, каталог креативных материалов необходим для реализации систем управления рекламой и обслуживания.

Сложность и скорость изменений

Наиболее заметное различие между основными и поддерживающими предметными подобластями — это сложность бизнес-логики. Поддерживающие подобласти просты. Их логика похожа на экранные формы ввода данных и операции ETL (извлечение, преобразование, загрузка), так называемые интерфейсы CRUD (создание, чтение, обновление и удаление).

Также, в отличие от основных предметных подобластей, поддерживающие предметные подобласти почти не изменяются. Они не предоставляют конкурентное преимущество компании и поэтому ценности в их развитии с течением времени нет.

Практические аспекты реализации

Отсутствие конкурентного преимущества позволяет избегать закрытой реализации поддерживающих подобластей. Однако, в отличие от обобщённых подобластей, готовых решений тут нет. Следовательно, компании не остается выбора, кроме как реализовать поддерживающие предметные подобласти самостоятельно. Простота бизнес-логики и редкость изменений позволяют сэкономить на реализации.

Для поддерживающих подобластей не требуются сложные шаблоны проектирования или другие передовые инженерные практики. Для реализации бизнес-логики будет достаточно фреймворка для быстрой разработки приложений.

С точки зрения кадрового обеспечения поддерживающая подобласть не требует высококвалифицированных инженеров. Оставьте их для работы в основных подобластях. Кроме того, простота бизнес-логики делает эту подобласть идеальным кандидатом на аутсорсинг.
Кто такие эксперты предметной области?
Давайте рассмотрим ещё один термин предметно-ориентированного проектирования, связанный с предметными областями, который мы будем часто использовать в следующих главах: эксперт предметной области (domain expert). Эксперты предметной области — это специалисты области, знающие все детали бизнеса, который мы собираемся моделировать и реализовывать в коде. Другими словами, эксперты предметной области — это авторитеты в области знаний в сфере применения этого программного обеспечения.

Эксперты предметной области не являются аналитиками, собирающими требования или инженерами, разрабатывающими систему. Они представляют сам бизнес. Это те люди, которые обычно и обнаруживают какую-либо бизнес-проблему и которые обладают первичными, обширными или по крайней мере глубокими знаниями в рассматриваемой сфере бизнеса. Системные аналитики и инженеры просто преобразуют их модели предметных областей в требования к программному обеспечению и исходный код.

Как правило, эксперты предметной области — это или авторы первичных требований или конечные пользователями программного обеспечения. Программное обеспечение должно решать их проблемы.

Экспертность может иметь разные направленности. Некоторые предметные эксперты имеют подробное понимание того, как работает вся сфера, в то время как другие специализируются в конкретных предметных подобластях. Например, в агентстве онлайн-рекламы эксперты предметной области могут быть менеджерами кампаний, медиа-байерами, аналитиками и другими участниками бизнес-процесса.

Заключение

Мы рассмотрели инструменты предметно-ориентированного проектирования для анализа деятельности компании. Как вы видели, всё начинается с предметной области — сферы, в которой работает компания — и услуги, которую она предоставляет клиентам.

Вы также узнали о различных строительных блоках, необходимых для достижения успеха в предметных областях, включая:

Основные предметные подобласти
Интересные проблемы. Деятельность, которую компания выполняет по-другому, отлично от конкурентов и от которой зависит её конкурентное преимущество.

Обобщённые предметные подобласти
Решённые проблемы. Задачи, которые все компании решают одним и тем же способом. Здесь нет места или необходимости для инноваций; вместо создания собственных реализаций, более эффективно использовать существующие решения.

Поддерживающие предметные подобласти
Скучные проблемы. Задачи, которые компания, вероятно, должна реализовать самостоятельно, но которые не предоставляют никакого конкурентного преимущества.

Наконец, вы узнали, что эксперты предметной области — это специалисты по предметной области компании. У них есть глубокие знания о сфере деятельности компании или одной или нескольких из её подобластей и они имеют решающее значение для успешного завершения проекта.
Глава 2
Изучение знаний о предметной области