Коротко про «Чистую архитектуру».
На днях решил проверить несколько фактов, в «Чистой архитектуре», а в итоге перечитал всю книгу. По мере прочтения сделал несколько записей, которые хочу развернуть в видео на S0ER TALKS.
Отмечу, что каждое новое прочтение вызывает все больше вопросов, и понимание того, что многие вещи раскрыты не полностью.
Итак, кратки конспект:
1. Мое мнение о книге: отлично подходит для программистов, которые хотят понять влияние архитектуры на код. С позиции разработки именно «архитектуры» мало помогает, так как не рассматривает существенные моменты: сбор и анализ требований, определение векторов развития и т.д.
Отлично подойдет для тех кто делает свои пет-проекты, стартапы или мелкую заказную разработку.
2. В книге довольно слабая позиция по построению архитектуры реальных проектов. В моей практике построение архитектуры больше похоже на узловую сборку. Т.е. никто не будет в реальном проекте писать свой «веб-сервер» или писать свою «СУБД». Узлы будут брать готовые, и брать с запасом прочности. Маловероятно, что в большом проекте кто-то скажет «ну нам пока хватает веб-сервера, написанного на коленке, а потом посмотрим».
3. Реальные проекты привлекают архитекторов с профильным опытом, а не строят каждый раз с нуля. Т.е. если вам нужен интернет магазин, то вы позовете человека, который уже разрабатывал интернет-магазин, а не будете сначала строить «интернет-ларек». Именно поэтому ко мне сейчас обращаются за консультациями – я могу на основе опыта сразу сказать где и чего не хватает.
4. «Кричащей архитектуры» на практике я не встречал, вся «информативность» достигается правильной стереотипизацией, если убрать с проекта «надписи», то кроме нагромождения «квадратиков» и «стрелочек» при всем желании не увидишь.
5. Проведение архитектурных границ в маленьких проектах делать особо смысла нет. Даже сам пример FitNesse, который разрабатывался самим «Дядюшкой Бобом» с архитектурной точки зрения плохо структурирован (по файловой структуре проекта не проведешь архитектурных границ), имеет низкий уровень абстракции (всего 0.2, при таком уровне большая часть классов должны быть неустойчивы, чтобы добиться общей стабильности проекта).
6. Отдельно про проект Fitnesse – это обычный пример сильнозацепленного монолита, с позиции архитектуры ничего особенного в нем нет. При уровне абстракции 0.2 у него есть всего два варианта реализации:
a. высокое переиспользование интерфейсов (тогда они должны быть «устойчивыми» или сопровождение превратится в Ад), что повышает зацепление на архитектурных границах, и вероятно там есть циклические зависимости (графи зависимостей строить лень).
b. Прямое использование и большое количество устойчивых классов (а не интерфейсов как в первом случае).
В обоих случаях допустимо только в маленьких проектах, потому что при росте количества команд они тупо начнут друг-другу мешать.
7. Про анализ требований в книге сказано мало, что странно. Потому что, например, пример с использованием файлов, вместо СУБД относится к проекту, где изначально в СУБД предлагалось хранить статические Вики страницы. При анализе требований было бы сразу очевидно, что «преимуществ» для такого типа контента в хранении в СУБД нет. На практике любой архитектор не просто следует моде, выбирая решение, а делает анализ «За» и «Против». И в случае с хранением статических страниц в файлах – это выглядит весьма разумно.
8. Что касается примера с использованием «кластера» вместо более простого «монолита», то опять это проблема анализа требований. В данном случае непонятно почему авторы решили, что им понадобится кластерное решение. Но в итоге решение можно было эксплуатировать (хоть и с кучей доп. Действий) как небольшой монолит, но вот если бы была обратная ситуация «небольшой монолит» вдруг понадобилось бы переделать в «кластерное решение», то проблем было бы в разы сложнее. Но в любом случае ошибка в требованиях и их анализе. У меня возникает только один вопрос: «Что архитекторам сказал бизнес-аналитик?» и был ли он вообще.