5.1. Введение в архитектуру Flutter-приложений

В предыдущих главах мы изучали отдельные аспекты Flutter: компоненты, виджеты, работу с данными и Сетью и другие. Но до сих пор мы рассматривали их как отдельные темы, не затрагивая вопрос о том, как всё это должно объединяться в единое целое. Пришло время поговорить об архитектуре приложений — том фундаменте, на котором строится качественный и поддерживаемый код.

Архитектура приложения — это не просто распределение файлов по папкам, а система принципов организации кода. Правильно выбранная архитектура призвана решать практические задачи: облегчить тестирование, упростить расширение функциональности, сделать код понятным для всех участников команды и снизить вероятность внесения регрессий при обновлениях.

У Flutter, как и у любой другой технологии, есть свои особенности, которые влияют на выбор архитектурных решений. Реактивный подход к обновлению UI, устройство фреймворка, структуры виджетов и их обновления — всё это создаёт уникальный контекст для архитектурных решений. Именно поэтому недостаточно просто перенести архитектурные паттерны из веб-разработки или нативного Android/iOS.

Экосистема Flutter развивается, и вместе с ней эволюционируют способы построения архитектуры — адаптируются уже известные подходы и появляются новые решения, заточенные именно под Flutter. В этой главе мы рассмотрим основные архитектурные концепции, применимые к Flutter-разработке:

  1. Основы Clean Architecture: базовый подход, разбиение на слои data — domain — presentation.

  2. Организацию файловой структуры проекта: «сперва слои» и «сперва фичи».

  3. Принцип инверсии управления и связывание зависимостей.

  4. Разновидности инверсии управления: ServiceLocator, Dependency Injection, Scopes.

  5. Связывание зависимостей: стандартными средствами Flutter, а также с помощью библиотек Provider, GetIt и Injectable.

  6. Управление состоянием в приложении: зачем это делать и как применять библиотеки Bloc и Redux.

  7. Архитектурные фреймворки — их особенности и ограничения

Прежде чем перейти к первому параграфу, хотим заострить ваше внимание на нескольких важных вещах.

  • Во-первых, тему архитектуры невозможно покрыть одним исчерпывающим гайдом или главой. Поэтому мы в первую очередь стараемся охватить эту тему «вширь»: расставить акценты на важных принципах и обозначить широкий спектр доступных инструментов, не фиксируя единственно верные подходы или библиотеки.

  • Во-вторых, чтобы научиться проектировать хорошие архитектурные решения, недостаточно теории. Вам потребуется практика. Потому что хорошая архитектура — это не та, которая следует всем модным трендам, а та, которая решает конкретные проблемы вашего приложения и команды. И роль этой главы — обратить ваше внимание на важные аспекты, которые помогут вам укрепить теорию и покажут, как применять знания на практике.

А теперь давайте приступим.

Чтобы добавить в заметки выделенный текст, нажмите Ctrl + E
Предыдущий параграф4.12. Параллельные вычисления и изоляты в Dart
Следующий параграф5.2. Чистая архитектура: что это такое и как она устроена