Блог

Domain-Driven Design: Синяя книга 20 лет спустя

Статьи
Синяя Книга по DDD Эрика Эванса произвела революцию. Эванс показал, как разрабатывать программное обеспечение со сложным и запутанным доменом, сохраняя рассудок. Для многих разработчиков жизнь разделилась на до книги и после.

Что хорошего

Эванс описывает, как справляться со сложностью предметной области, и предлагает методологию по созданию ПО, которая позволяет точно отразить нюансы бизнес-логики в коде.

Эванс принёс революционные концепции Bounded Context и Ubiquitous language. Показал, как моделировать сущности реального мира и их взаимодействие в коде. Подметил, что создать идеальную модель невозможно, но вполне возможно создать рабочую и полезную в конкретной ситуации.

Через несколько лет идеи Эванса лягут в основу концепции микросервисов Мартина Фаулера и Сэма Ньюмана. Их ключевая идея — разделение deployment units по bounded context. Event Storming, который помогает вытащить требования из экспертов предметной области и пересадить эти требования в головы разработчиков с минимальными потерями, тоже опирается на Ubiquitous Language.

Ещё Эванс показал на примере, что разработка ПО — это эволюция, где ПО изменяется вместе с пониманием предметной области командой. Эта идея перекликается с идеей рефакторинга, появившейся примерно в то же время благодаря Мартину Фаулеру.

Критика

Эрик, как первопроходец Domain-Driven Design’а, прекрасно объяснил концепцию, но множество деталей имплементации осталось за кадром. Из-за этого многие разработчики заклеймили DDD как исключительно теоретический концепт, не имеющий ничего общего с реальной разработкой.

Например, вопрос, как оградить домен от технических деталей реализации фреймворков, до сих пор остаётся не решённым для многих разработчиков. К счастью, эту проблему 10 лет спустя удалось решить Роберту Мартину в его книге Clean Architecture, где он показал весьма практическое решение проблемы Dependency Inversion между доменом и инфраструктурой.

Эрик уделил много внимание тактическим паттернам — Entity, Domain Service и так далее, которые отвлекли внимание читателей от более важных стратегических паттернов — Ubiquitous Language и эволюционной сущности моделей.

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

Эрик Эванс настоял на том, что Ubiquitous Language — это фундамент Domain Driven-Desing. Но не описал, как же этот единый язык должен формироваться.

Техника Event Storming, позволяющая экспертам предметной области и разработчикам разговаривать на одном языке, была придумана Альберто Брандалиние только через 10 лет после выхода Синей Книги. Так что многие разработчики целых 10 лет обвиняли DDD в исключительной академичности.