В издательском доме «Вильямс» вышел русский перевод книги Эрика Эванса «Предметно-ориентированное проектирование» (Domain-Driven Design), которая за семь лет своего существования уже успела стать классикой в англоязычном мире разработчиков программных систем.
Несмотря на то что труд Эванса посвящен одному из ключевых этапов жизненного цикла программ – моделированию предметных областей, он является единственным в своем роде. Дело в том, что именно Эванс первым подготовил систематизированное и организованное обобщение накопленных за годы практики принципов построения логической структуры предметных областей. Хотя многие из этих принципов были известны большинству проектировщиков и ранее, говорили и писали о них крайне редко – данная книга восполнила этот пробел.
В своей работе автор идет дальше простого формального описания «секретов» построения хороших предметно-ориентированных моделей — Эванс стремится донести до читателя систему подходов и взглядов на то, чем должна быть правильная модель предметной области, которую он и называет «предметно-ориентированным проектированием». Так, упор в книге делается на модель как средство коммуникации между заказчиком (экспертом-аналитиком), проектировщиком и программистом. Соответственно, в рамках такой модели должен быть создан «единый язык», понятный всем участникам процесса разработки. Для облегчения создания и понимания такого языка в конце книги приведен глоссарий, вобравший в себя наиболее часто употребляемые в книге термины и обозначения. Кроме того, в предметно-ориентированном проектировании важную роль играет то, насколько глубоко отражена сложная структура предметной области в архитектурном проекте разрабатываемого приложения.
Стоит отметить, что концепции Эванса хорошо согласуются со «скорыми» (agile) методами разработки: например, автор обращает внимание читателя на то, что не стоит разделять построение модели и ее реализацию – напротив, он утверждает, что по-настоящему глубокое понимание предмета всеми участниками процесса разработки может быть достигнуто только тогда, когда будет иметь место поэтапное итеративное совершенствование и эволюционирование модели, ее постепенное органичное «врастание» в проект. Это постоянное развитие, в свою очередь, может осуществляться только при условии постоянного сотрудничества разработчиков и специалистов в предметной области. Ключевую роль в работе автора также играет рефакторинг – реструктуризация программы, не влияющая на ее функциональные возможности, но делающая ее более понятной и гибкой.
Книга разделена на четыре крупные части. Первая («Модель предметной области в работе») является вводной: в ней рассматриваются базовые постановки задач предметно-ориентированного проектирования, даются определения основных терминов, говорится о роли «единого языка» в проекте.
Во второй («Структурные элементы предметно-ориентированного проектирования») осуществляется переход от абстрактных моделей к примерам, основанным на конкретных работающих программах. При этом внимание автора приковано к вопросу параллельного и взаимодополняющего развития модели и ее программной реализации. Такое развитие возможно только при внимательной проработке отдельных элементов – Эванс предлагает заниматься ею, используя определенные стандартные шаблоны моделирования. Это упорядочивает проектирование и способствует улучшению взаимопонимания между членами группы разработчиков.
Третья часть («Углубляющий рефакторинг») фокусируется на исследовательском процессе в ходе проектирования – полное понимание предметной области никогда не приходит сразу и может быть достигнуто только в ходе работы над проектом. Каждое новое продвижение вперед в понимании предмета находит свое отражение в значительных изменениях в архитектуре программной системы (рефакторинге). Исследовательская деятельность, несмотря на свою творческую природу, не представляется Эвансу хаотичной – он предлагает ряд методов для ее лучшей организации.
Наконец, четвертая часть («Стратегическое проектирование») включает в себя описание основных принципов принятия стратегических проектных решений на уровне проекта в целом. Здесь рассматриваются проблемные ситуации, которые могут возникнуть в сложных или устаревших системах.
Книга Эванса рассчитана на разработчиков объектно-ориентированного программного обеспечения (в примерах используется код Java), знакомых с объектно-ориентированным моделированием. Многие ситуации разбираются на основе диаграмм UML. Материал изложен не в абстрактных моделях, а на примере реальных проектов по разработке программного обеспечения, участником которых был сам Эванс. При этом внимание уделяется как успешным, так и неудачным проектам, – вместе с автором читатель учится и на его победах, и на поражениях. Как отмечает сам Эванс, «все успешные проекты объединяло— то, что для них была построена подробная модель предметной области». Проекты же без такой модели, разрабатываемые без «общего языка», редко продвигаются дальше первой версии. Однако даже правильно построенная модель сама по себе отнюдь не является гарантом успеха — не менее важно организованное распределение труда программистов согласно этой модели. В противном случае – и это подтверждает не один пример – даже самые квалифицированные разработчики могут потерпеть сокрушительное поражение.
Книга Эванса быстро завоевала признание среди специалистов, и, как считает автор концепции экстремального программирования Кент Бек, она «должна стоять на полке у каждого мыслящего программиста».
Эванс Эрик. Предметно-ориентированное проектирование (DDD): структуризация сложных программных систем. — М.: Вильямс, 2011. — 448с. ISBN 978-5-8459-1597-9