Что такое Domain-Driven Design и почему он может быть полезен Вашему бизнесу?

| September 28, 2022

Разработка проектов с обилием сложных бизнес процессов всегда требует огромных усилий от команды, времени и глубокого понимая предметной области.

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

Чем ближе будет разработанная модель программного обеспечения к бизнесу, тем проще разработка и поддержка программного решения.

С нарастанием всеобщей цифровизации и автоматизации, сложность разрабатываемых программных систем постоянно увеличивается.

И в ответ на возникшее увеличение сложности построения программных систем, ещё в 2003 году, Эрик Эванс предложил новый подход к проектированию программного обеспечения - Предметно-Ориентированное Проектирование или Domain-Driven Design.

Что же такое Domain-Driven Design?

Domain-Driven Design (далее DDD) или Предметно-Ориентированное Проектирование - это мощный набор интеллектуальных инструментов, которые могут оказать серьёзное влияние на эффективность команды при создании программных систем.

Это уникальный подход к разработке программного обеспечения, который обеспечивает высокое качество проектирования моделей программного обеспечения.

Прежде всего, DDD — это про общение между людьми, одна из его задач — сломать имеющийся «языковой барьер» между бизнесом и разработкой.

Изначальная идея DDD была описана Эриком Эвансом в его книге «Предметно-ориентированное проектирование. Структуризация сложных программных систем».

Рисунок 1. “Blue” book Эванса

Когда применяется Domain-Driven Design?

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

Бизнес-ценность DDD

Итак, почему же DDD может быть выгоден Вашему бизнесу?

DDD поможет овладеть сложностью

Благодаря DDD вырабатывается точное определение и описание бизнеса, а следовательно, достигается полное его понимание и понимание его целей всеми его участниками.

Лучше понимание - быстрее достигаются цели бизнеса, меньше ошибок делается по пути.

Более того, DDD прекрасно интегрируется с различными подходами моделирования бизнес процессов, такими как Domain Storytelling, что делает элементы бизнеса документируемыми и доступными для всех его участников.

Эксперты предметной области будут принимать участие в разработке программного обеспечения

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

В DDD совместной работе экспертов предметной области и разработчиков отведена ключевая роль. Тандем из людей обоих направлений занят совместным созданием модели программной системы. Модель, полученная в результате такого подхода, тесно связана с бизнесом, в рамках которого она создавалась, и оперирует терминами самой предметной области.

Будет улучшена архитектура предприятия

В DDD модели программного обеспечения имеют чётко очерченные границы. Благодаря этому все команды предприятия начинают хорошо понимать, где и почему им следует выполнять интеграцию.

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

Удешевление разработки и поддержки

Удешевление происходит за счёт следующих правил:

  1. «Каждое изменение в коде, обязано быть продиктовано изменением в бизнесе». При тщательно и правильно спроектированной модели программного обеспечения и правильно выполненной реализации проекта отсутствует необходимость в постоянном «причёсывании» кодовой базы через череду рефакторингов, что, в свою очередь, высвобождает время разработчиков для работы над действительно важными для бизнеса вещами.
  2. Онбординг новых людей в проект и поддержка проекта в целом происходят быстрее, поскольку, программное обеспечение, реализованное с подходом DDD полностью соответствует спроектированной и задокументированный модели, которая, в свою очередь соответсвует самой предметной области бизнеса.

Заключение

В этой статье мы рассмотрели несколько моментов, которые показывают пользу внедрения DDD подхода в процессы разработки программных систем. Означает ли это, что DDD будет полезен всегда и везде, и стоит бросить все остальные подходы и концентрировать своё внимание на DDD? Конечно же, нет.

DDD сложная и объёмная тема, изучение которой требует времени, упорства и обязательной практики. Однако все усилия по её освоению воздадутся сторицей.

Список материалов

  • [1] «Предметно-ориентированное проектирование. Структуризация сложных программных систем», Эрик Эванс, ООО «Диалектика», ISBN 978-5-6040724-9-3
  • [2] «Реализация методов предметно-ориентированного проектирования», Вон Вернон, ООО «Диалектика», ISBN 978-5-907114-13-5