Всем привет! С помощью этой статьи хочу поделиться результатами своей работы по переводу книги Мартина Фаулера "Analysis Patterns". Все оригинальные части книги и диаграммы переведены, всё готово для чтения онлайн. Однако работа не завершена, потому что хочется ещё добавить комментариев, пояснений и примеры кода (которых по сути не было) от себя, после многих лет использования "шаблонов".
Книга "Аналитические шаблоны" была написана в 1997, однако, на мой взгляд (и не только) сохраняет актуальность и по сей день. По сути, Мартин в книге рассматривает как строить мета-модели системы, т.е. такие модели, которые будут актуальны на очень долгое время жизни системы. Мета-модели также заключают в себе очень многие возможности, которые система может поддерживать в теории без значительных концептуальных переделок. Если созданная мета-модель достаточно корректна, то она может помочь провалидировать предположения и поставить\ответить на многие вопросы о системе.
О самой книге
Честно сказать, данная книга не проста для чтения, что в оригинале, что в переводе. Мартин Фаулер пишет весьма специфично сам по себе, а тут еще сложилось то, что тема не простая сама по себе и что это первый писательский опыт Мартина. Когда я читал книгу в первый раз много лет назад, всё осложнялось ещё тем, что это был скан печатного издания, где диаграммы и описания чаще всего были на разных сторонах страницы, так что приходилось читать в двух ПДФ читалках, чтобы можно было сопоставлять описание и диаграммы. Надеюсь, что в нынешнем виде это удалось в определенной степени побороть, хотя не исключаю того, что вам придется так же открывать эту книгу в двух закладках браузера. При описании аналитических шаблонов Мартин постоянно ссылается на предыдущие примеры и диаграммы, так что придется полетать по тексту все равно.
Наиболее полезной и неустаревающей является первая часть. Вступление тоже полезно прочитать, чтобы понять контекст в котором все шаблоны были найдены. Вторую часть можно смело пропускать, так как там описаны уже давно известные вещи, которые к тому же и сильно эволюционировали с момента написания книги. Тогда идеи были полезными и, возможно, новаторскими, которые действительно могли упростить жизнь разработчикам ПО, но сейчас ничего кроме слезы олдфага они не вызывают. Пока что даже и не знаю, стоит ли как-то дополнительно комментировать главы из второй части, так как это может потянуть на отдельные книги, которые к тому же уже написаны и вряд ли я смогу привнести что-то свежее.
Последним техническим моментом нужно отметить нотацию диаграмм. На момент написания UML только вставал на ноги и активно развивался, так что Мартину пришлось смешивать некоторые нотации и выдумывать порой что-то своё, так что в тексте периодически появляются ссылки на описание нотации, которая находится в третьей части книги. Наверно даже лучше посмотреть раздел С, как только вы дойдете до первых диаграмм во второй главе.
Дальнейшие планы
Для второй главы я стал добавлять примеры кода реализующие шаблоны, и не для всех шаблонов готовы примеры, часть есть в репозитории в проекте рядом. Порой это может быть тривиально, для опытных разработчиков, но чего только я не повидал за годы работы с разными командами. Естественно, я не претендую на то, что мои примеры фантастически хороши и прекрасны, но они должны дать понятие как примерно можно реализовать тот или иной шаблон. Скорее всего процесс написания примеров растянется ещё на один год, но я всё же надеюсь, что доведу работу до конца. Было бы хорошо, если кто-то захочет помочь с написанием примеров или перевода их на другие языки программирования, отличные от С#.
Персональные впечатления
Хочется еще добавить несколько слов о моем персональном впечатлении об изложенном материале. Впервые книгу я прочитал где-то в 2016 году, уже будучи архитектором ПО. Чтение давалось трудно, скрывать не буду, даже больше, пришлось книгу прочитать раза три подряд, чтобы действительно понять суть шаблонов и в первом приближении понять как мета-модели строить и использовать. Уже не помню для каких проектов стал применять мета-моделирование и насколько успешно это было, но со временем получалось все лучше и лучше, так как стало получаться глубже понимать домен и как он будет реализовываться. Какие доменные сущности понадобятся и как они будут связаны между собой. На основе мета-моделей удавалось задавать более глубокие вопросы доменным экспертам, которые не лежали на поверхности и выходить на неявное поведение системы, укрытое где-то в зоне неосознанного знания экспертов.
Знание аналитических шаблонов впоследствии всплывало каждый раз, когда аналитики описывали проблемы домена. После 5 минут описания в мозгу появлялись комбинации шаблонов, концептуально описывающие решение и связанные с этим сложности. Так же всплывали неупомянутые сущности домена, которые фигурировали в шаблонах и могли оказать существенное влияние на гибкость решения и его возможности.
В 2020 участвовал в архитектурных катах от O'Reilly и описание проблемы с помощью аналитических шаблонов позволило глубже понять суть и предложить решение, с которым мы и взяли первое место. Конечно, одними мета-моделями всех проблем архитектуры не решить, но можно сделать качественные предположения, которые упростят дальнейшую разработку и подведут к вопросам для прояснения неочевидных правил взаимодействия доменных сущностей.
Заключение
Я до сих пор считаю, что мета-моделирование одна из областей архитектуры, которая незаслуженно обходится стороной, скорее всего просто по незнанию. Но знание шаблонов и понимание принципов мета-моделирования дает вам буквально хрустальный шар предсказаний подсказывающий как система должна быть организована и где вероятнее всего будут точки будущих расширений. Это относится и к архитекторам, и к аналитикам, и к старшим разработчикам. Так что призываю вас не кидать чтение книги под первым впечатлением, что автор использует усложнение ради усложнения и выдумывает какие-то странные вещи, которые кажется никак не помогают при реальной разработке. Создавать мета-модель иногда действительно тяжело, но научить читать готовые можно минут за 5-10. Так что совершенно не важно, если в команде вы один/одна будете знать как строить мета-модели, пользоваться ими смогут все.
Собственно, из-за высокой ценности книги и взялся за перевод книги, так как хочу, чтобы среди русскоязычных разработчиков и архитекторов было больше хороших специалистов глубоко понимающих задачи проектируемых систем.
Желаю вам приятного и познавательного чтения.