К основному содержимому
#Architecture

Clean Architecture (Чистая архитектура) (Рубрика Architecture)

#Architecture #Software #Engineering #DistributedSystems #SystemDesign

Я прочитал эту книгу Дяди Боба (Роберта С. Мартина) шесть-семь лет назад и нашел концепции достаточно интересными, а по самым интересным частям я даже сделал подробные разборы: "Дизайн и архитектура, парадигмы программирования" и "Принципы дизайна модулей и разделения по компонентам", но все это было до старта этого канала. Поэтому сегодня я решил исправить это недоразумение и рассказать об этой книге, в которой Дядя Боб подчеркивает важность разделения ответственности и независимость от фреймворков, баз данных и пользовательских интерфейсов. Дядя Боб это делает очень ультимативно, что сильно подрывает веру в его подход. Ключевыми идеями являются следующие Правило зависимостей: зависимости исходного кода должны указывать только внутрь, в направлении высокоуровневых политик. Это создает систему, в которой бизнес-правила не зависят от технических деталей. Слоеность архитектуры: при реализации этого правила у нас появляются отдельные слои - Entities (cущности) - основные бизнес-объекты и корпоративные бизнес-правила - Use cases (варианты использования) - бизнес-правила конкретного приложения. Тут забавно, что этот термин взят из UML, где так называется один из видов диаграмм, про которые я рассказывал раньше

  • Interface adapters (адаптеры интерфейса) - контроллеры, презентеры и шлюзы
  • Framework & drivers (фреймворки и драйверы) - внешние инструменты, базы данных, UI-фреймворки Этот архитектурный подход близок к гексагональной архитектуре (hexagonal architecture) или порты и адаптеры и луковая архитектура (onion architecture). Она также активно включает принципы SOLID, особенно принцип инверсии зависимостей, на котором строится вся слоистость и правило зависимостей. Боб говорит о том, что архитектура должна "кричать" о своем назначении — при взгляде на структуру кодовой базы она должна отражать бизнес-домен, а не технические детали.

С точки зрения применимости clean architecture наиболее полезна в следующих сценариях:

  • Сложные или долгоживущие приложения, где поддерживаемость является критически важной
  • Системы, где доменную модель решили выделить отдельно и использовать стиль DDD (domain driven design)
  • Проекты, требующие четкого разделения между бизнес-логикой и инфраструктурой Она помогает создавать системы, которые могут развиваться со временем в соответствии с изменяющимися бизнес-потребностями, и обеспечивает гибкость для замены фреймворков, баз данных или UI-технологий с минимальным влиянием на основную бизнес-логику.

Но этот подход заслуженно критикуют за

  • Избыточную сложность для малых или простых проектов с прямолинейными требованиями
  • Чрезмерную слоистость и натыкивание интерфейсов без явных преимуществ, что приводит к "злоупотреблению интерфейсами"
  • Избыточный шаблонный код и абстракции, которые затрудняют понимание системы
  • Чрезмерно крутую кривую обучения для инженеров и строгую дисциплину для правильной реализации
  • Замедление начального развития проекта из-за предварительных усилий по проектированию
  • Низкую производительность итогового решения из-за чрезмерного количества абстракций

Итого, я видел подходы к применению Clean Architecture для повышения качества кода в существующих проектах, но я уже активно не писал код сам, когда Uncle Bob явил свою концепцию миру. Именно поэтому я не могу оценить из первых рук насколько с ней получаются хорошие приложения:) Но мне кажется, что это как с любым подходом - можно сделать хорошо, а можно тяп-ляп ... Чистая архитектура тут не исключение.

#Architecture #Software #Engineering #DistributedSystems #SystemDesign