Как прокачаться в application architecture?
Публичный постВсем привет. С какого-то момента начал ощущать потребность во внедрении какого-либо архитектурного подхода в приложениях с целями:
a) получить все плюсы хорошей архитектуры классов (вот здесь их список если кому интересно).
б) правильно и понятно структурировать код (файлы, классы и т.д.) и договориться с командой как это будут делать все.
Путем ресерча и недолгого обсуждения с коллегами остановились на Чистой Архитектуре Р. Мартина. Она была изучена и успешно внедрена и на этом я и остановился в app design.
Сейчас же решил еще дополнительно покопать в эту область чтобы уже поставить себе галочку "изучено" и в будущем использовать лучшее из доступного. В связи с чем у меня есть пара вопросов к сообществу:
- Знаете ли вы что-то на порядок лучше ЧА? По таким параметрам: более подходящее для веба (более универсальное), лучше документированное, проще (ЧА по началу кажется запутанной и только с опытом понимаешь как ее реализовывать).
- Знаете ли вы подходы которые дополнят ЧА или другую архитектуру? Другими словами - че комбинировать?
P.S. Я не спрашиваю про system design, а говорю именно об архитектуре классов в прикладном приложении
Есть два хороших курса. Пока их не смотрел, но планирую в сентябре начать.
Из книжек могу посоветовать:
UPD
Только сейчас заметил примечание, может другим будет интересно.
На что стоит обратить внимание в первую очередь, по моему очень скромному мнению:
GRASP. Одного только coupling/cohesion хватит чтобы закопаться для долгие годы. Рекомендую больше чем SOLID, т.к позволяет принимать решения при написании кода, а не в ретроспективе.
Hexagonal Architecture. Здесь вам и порты с адаптерами, и слои и все что душе угодно для низкого coupling и высокого cohesion.
CQRS. Много приемуществ, не самая большая цена.
Из книг порекомендую:
Эрик Эванс: «Предметно-ориентированное проектирование»
Вон Вернон: «Реализация методов предметно-ориентированного проектирования »
Ну а еще, залетайте в чатик(не мой, не реклама): https://t.me/oop_ru, там часто ведутся обсуждения и дискуссии, почувствуете в какие стороны рыть и позадаете свои вопросы.
PS есть еще вот такой дорогущий и хороший курс от Уди: https://learn.particular.net/courses/adsd-online#cta-section
Не знаю насколько правильно будет оставлять ссылку на скачивание в открытом доступе, вообщем напишите в телегу.
Дам очень ценный совет.
Суть понимания любой области, в первую очередь - в понимании проблем этой области. Причем именно в понимании а не просто знании. Осознавая эти проблемы Вы ищете решения. В анализе, общении с коллегами, в чтении книг, статей и т.д.
Если Вы хотите понять архитектуру просто почитав книги, у меня для Вас плохие новости. Скорей всего это будет в духе изучения бокса по видеороликам.
Я частенько таких разрабов встречаю, которые зазубрили Чистые коды/архитектуры и т.д но при этой понимания почему так у них вообще нет, более того они не понимают где эту нужно а где вредно, где автор советует глупости по современным меркам.
Хотите изучать архитектуру - изучайте архитектуру на примере того что у Вас есть, дополняя это почитыванием книжек, статей и общением с разными людьми. Книги очень вторичны, и переоценены, без понимания области и опыта.
Есть интересный блог в котором автор переодически рассматривает вопросы соверменной архитектуры приложений. Особенно приятно что он рассматривает именно с клиентской стороны
https://khalilstemmler.com/
Надо прочитать все книги на эту тему.
И опыт. Скорее всего опыт рефакторинга тебе нужен в том числе, только я не уверен что синтетические приложения считаются, потому что важно уметь делать рефакторинги на живых приложениях.
В процессе рефакторинга просто подмечаешь наиболее чётко что сделанно не так и что стоит переделать, а что оставить, что удобно а что нет.
Читать больше кода. Ну прям вот бери и читай фреймворки, опенсорс, всё что считаешь хорошими примерами кода и архитектуры, смотри чо как там, подмечай хорошие решения.
Не претендую на ответ, но слышал хорошие отзывы про книжку Мартина Фаулера, Архитектура корпоративных программных приложений
Очень хорошая книга Применение UML и шаблонов проектирования Крэга Лармана.
Он является автором принципов GRASP (выше уже написали, что это альтернатива SOLID). Книга толстая, но в ней рассматривается всё время одно и то же приложение от начала до конца.
Там нет никакой универсальной архитектуры, но очень хорошо рассматриваются принципы построения объектно-ориентированных систем.