Ревью книги Patterns of Enterprise Application Architecture
Книга попала в TODO список еще очень-очень давно по рекомендации коллег - я предполагал, что наконец узнаю как делать все правильно. Мои ожидания были очень высокие и в конце концов не оправдались.
Начнем с позитивных моментов.
Это большой и систематизированный каталог архитектурных шаблонов. О некоторых я только слышал, а часть стали для меня открытием. Например, шаблон Data Mapper практически не используется в экосистеме веб-разработки на Rails, а Unit of Work оказался для меня полностью новым подходом. Коллеги из соседнего проекта на .Net подтвердили, что последний вполне себе актуален и они используют его у себя в проекте.
Для каждого шаблона кроме краткого общего описания есть секция “Как это работает” с примерами и секция “Как это использовать”. В завершение обычно приводится большой пример на Java/C#.
Книга прояснила пробелы со знакомыми шаблонами и устаканилась в голове терминология. Например, встал на свое место шаблон ActiveRecord. Понравилось ясное и простое определение шаблона Value Object (aka POJO или PORO) и отличия от Transfer Object.
Злободневный вопрос как правильно готовить Service Layer затронут, но не раскрыл полностью. Вероятно автор с ним мало работал. Несмотря на это короткие примеры и описание применения нахожу позелными.
Самые любопытными разделами оказались:
- Domain Logic Patterns (главы Domain Model и Service Layer)
- Data Source Architectural Patterns (главы Active Record и Data Mapper)
- Object-Relational Behavioral Patterns (главы Unit of Work и Identity Map)
- Web Presentation Patterns (главы Transform View, Two Step View и Application Controller)
Теперь к негативу
В процессе чтения я столкнулся с рядом сложностей, а в некоторых статьях просто на каждом абзаце. Теперь подробнее.
Предлагаемый автором подход к чтению. В предисловии предлагается читать первую часть (обзорную, с общими рассуждениями и сравнениями шаблонов) сразу целиком, а вторую (со списком самих шаблонов) уже в произвольном порядке как справочник. Возникает вопрос - как можно читать первую часть со сравнениями шаблонов без знакомства с этими самыми шаблонами и без чтения второй части? В дополнение все усложняют постоянные ссылки на другие главы и шаблоны.
Структурирование подразделов. В отличи о GoF с сжатой и компактной структурой и статьями (название - описание проблемы - краткое описание решения - пример - более детальное описание) здесь автор явно не экономит на бумаге - его рассуждения пространны, многословны и полны воды. Листинги кода в примерах просто огромные - легко могут занять 3-4 страницы. И кажется, что за деталями реализации теряется общая идея.
Терминология автора. Она явно устарела лет на 20. Постоянно натыкаешься на какие-то странные и неоднозначные термины, для которых, кстати, есть стандартные и общеупотребимые аналоги. Книга претендует на универсальность и независимость от какого-то конкретного стека, но иногда проскальзывают термины специфичные для конкретного стека (например Java) и это сильно бросается в глаза. Например, container-managed transactions, thread instance, package…
Изменение масштаба. Рассуждения об архитектуре приложения может внезапно прерваться деталями реализации и переходом на уровень классов и методом.
Первая часть. Обнаружилось, что она практически бесполезна и дублирует вторую. Автор повторяет материал из второй части другими словами и более кратко. Я не нашел, практически, ничего нового.
Итого
В целом впечатление неоднозначное. Я нашел для себя полезную информацию, но на книгу ушло непропорционально много времени. В книге много воды и несущественных подробностей реализации, запутанная/непривычная терминология.
Книгу определенно можно и нужно осовременить адаптировав терминологию и сильно ужав в размерах. Думаю только тогда она будет стоить потраченного времени.