Омельченко Михаил | Django School

Омельченко Михаил | Django School 

О веб разработке, IT и AI простым языком

23subscribers

95posts

Введение в понятие предметно-ориентированного проектирование (Domain-Driven Design - DDD)

Domain-Driven Design (DDD), или предметно-ориентированное проектирование, — это подход к разработке программного обеспечения, который сфокусирован на создании софта, основываясь на структуре и логике бизнеса. Концепция была впервые предложена Эриком Эвансом в его книге “Domain-Driven Design: Tackling Complexity in the Heart of Software”, опубликованной в 2003 году. Основная цель DDD — обеспечить создание программных систем, которые отражают сложные бизнес-процессы и позволяют гибко реагировать на изменения.
Принципы DDD заключаются в том, чтобы выделить самую суть бизнеса — его ключевые концепты и операции, и отобразить эти аспекты в структуре кода. Это помогает уменьшить сложность системы за счёт её разделения на меньшие части, которые легче управлять и разрабатывать.
Основные компоненты DDD
В контексте DDD принято выделять следующие элементы:
Сущность (Entity): объекты, имеющие уникальный идентификатор и непрерывную жизненную цепочку.
Агрегат (Aggregate): группа объектов, которые мы рассматриваем как единое целое для выполнения определённых операций.
Сервис (Service): составляющая архитектуры, представляющая действия или операции без связи с конкретными сущностями или агрегатами.
Репозиторий (Repository): механизм для доступа к коллекциям агрегатов или сущностей.
Фабрика (Factory): способ создания экземпляров сложных сущностей и агрегатов.
Использование этих компонентов позволяет отразить структуру предметной области на уровне кода таким образом, чтобы это было понятным для всех участников разработки.
Единый язык
Для успешного применения DDD необходимо использовать единый язык (Ubiquitous Language), который будет общим для всех участников проекта — как для разработчиков, так и для экспертов бизнеса. Это способствует единому пониманию задач и минимизации риска недопонимания при проектировании системы.
Для того чтобы уравнять разработчиков и экспертов предметной области, чтобы было гораздо проще обмениваться полезными знаниями о предметной области, подход DDD предлагает применять общий набор терминов, понятий и фраз, который будет использоваться в общении между членами команды, и который позже отразится в исходном коде программы.
Это один из основных и самых важных шаблонов предметного-ориентированного проектирования.
Это не бизнес жаргон, навязанный разработчикам, а настоящий язык, созданный целостной командой – экспертами в предметной области, разработчиками, бизнес-аналитиками и всеми, кто вовлечен в создание системы. Роль в команде не столь существенна, поскольку каждый член команды использует для описания проекта единый язык.
Применение DDD имеет ряд преимуществ:
Лучшее понимание бизнес-логики проекта всеми членами команды.
Уменьшение сложности за счет декомпозиции системы на более мелкие и понятные части.
Гибкость в изменении и расширении функционала благодаря чёткому разделению ответственности между элементами системы.
Однако есть и недостатки:
Сложность первоначальной настройки архитектуры.
Нужен высокий уровень дисциплины в поддержании актуальности модели.
Может быть излишне комплексным для маленьких проектов.
Использование DDD в проектах средней сложности.
В проектах средней сложности DDD помогает выделить ключевые элементы бизнеса, оптимизировать архитектуру приложения и облегчить коммуникацию между разработчиками и экспертами предметной области. Более того, использование таких элементов DDD, как Entities, Value Objects, Aggregates и Bounded Contexts способствует созданию чистой структуры кода, что делает систему более гибкой к изменениям и эволюции со временем.
Использование DDD в небольших проектах проектах.
Применение DDD в небольших проектах может показаться избыточным из-за сложности и глубины подхода, предназначенного для работы с большими бизнес-системами. Однако и в малых проектах DDD может быть полезен для создания четкой структуры и моделирования бизнес-процессов. Сосредоточив внимание на основных элементах бизнес логики и разделяя систему на небольшие модули, команды могут достичь высокой уровня гибкости и поддерживаемости кода, что критически важно даже в небольших проектах. Также использование DDD способствует лучшему пониманию задачи всем участникам проекта, поскольку фокусируется на языке предметной области, унифицируя термины и концепции как для разработчиков, так и для заинтересованных лиц со стороны бизнеса.
Go up