Омельченко Михаил | Django School

Омельченко Михаил | Django School 

О веб разработке, IT и AI простым языком

23subscribers

93posts

Чистая архитектура: определение и основные принципы

“Чистая архитектура” – это концепция в области программирования, созданная Робертом Мартином (известным также как дядюшка Bob), которая направлена на организацию кода таким образом, чтобы он был удобен для чтения, написания и поддержки. Основной фокус данной концепции заключается в разделении ответственности между различными частями системы, что обеспечивает независимость кода от фреймворков, UI, баз данных и любых внешних агентов.
Основные принципы “Чистой архитектуры”:
Независимость от фреймворков: система не должна зависеть от библиотек, что позволяет уменьшить риск ограничений и зависимостей.
Тестируемость: бизнес-правила могут быть протестированы без UI, базы данных, серверов или любых других внешних элементов.
Уровни абстракции: разделение кода на слои с четко определенными правилами для перехода от одного к другому.
Независимость от UI: пользовательский интерфейс можно легко изменить без изменения остальной системы.
Независимость от баз данных: бизнес-правила не связаны с типом хранения данных.
Цели и преимущества использования “Чистой архитектуры” в разработке программного обеспечения
Главная цель “Чистой архитектуры” — создание такого программного обеспечения, которое легко поддается изменениям, расширению функциональности и поддержке.
Основные компоненты “Чистой архитектуры”
Сущности (Entities): представляют объекты предметной области с высокоуровневыми правилами бизнеса.
Use Cases: содержат специфичную для приложения бизнес-логику.
Контроллеры и презентеры: служат связующим звеном между использованием use case и пользовательским интерфейсом или другими методами доставки информации (например, API).
Внешние интерфейсы (Interface Adapters): преобразуют данные к формату удобному для Use Cases или сущностей.
Сущности в чистой архитектуре
Чистая архитектура, предложенная Робертом Мартином, ставит в центр разработки бизнес-логику. В её основе лежат сущности (Entities), которые представляют высокоуровневые бизнес-правила приложения.
Сущности — это объекты, содержащие критически важные данные для бизнеса и методы для управления этими данными. Они не зависят от UI, баз данных или любых других элементов инфраструктуры. Это делает их независимыми от изменений во внешних слоях и позволяет сохранять стабильность бизнес-правил на протяжении всего жизненного цикла программного продукта.
Основное преимущество такого подхода — удобство тестирования и рефакторинга. Сущности могут быть легко проверены на соответствие бизнес-требованиям без необходимости заботиться об интеграции с пользовательским интерфейсом или базой данных.
Вкладывая время в проектирование сущностей, мы обеспечиваем гибкость приложения перед изменениями технических требований, что помогает долгосрочной поддерживать и развивать проект.
Use Cases в чистой архитектуре
Use Cases описывают конкретные действия, которые пользователь может выполнить с системой. В чистой архитектуре они реализуются в виде независимых от UI и баз данных классов, что обеспечивает гибкость и упрощает тестирование.
Примеры применения Use Cases:
- Аутентификация пользователя: определяет процесс верификации данных пользователя.
- Обработка заказа: управляет логикой создания, обновления и отслеживания заказа.
- Отчетность: автоматизирует создание различных видов отчетов для анализа работы системы.
Использование Use Cases позволяет разработчикам сконцентрироваться на бизнес-логике, минимизируя зависимости и упрощая масштабирование приложения. Это делает код более чистым, понятным и легко поддерживаемым.
Контроллеры и презентеры в чистой архитектуре
Чистая архитектура предусматривает строгую разделение ответственностей между компонентами системы. В этом контексте, контроллеры и презентеры играют ключевую роль.
Контроллеры отвечают за обработку входящих запросов, они являются связующим звеном между пользовательским интерфейсом и бизнес-логикой. Их задача — получить данные от пользователя, преобразовать их при необходимости и передать дальше по цепочке.
Презентеры, с другой стороны, занимаются подготовкой данных для отображения. Они берут на себя работу по форматированию данных из моделей в удобный для пользователя вид. Это может включать выборку нужной информации, её сортировку или локализацию.
Использование этих двух компонентов способствует созданию гибкой архитектуры, которая легко поддается тестированию и модификации. Контроллеры и презентеры помогают избежать смешения бизнес-логики с пользовательским интерфейсом, что является ключевым для поддержания чистоты кода.
Внешние интерфейсы
Внешние интерфейсы — это точки интеграции системы с внешним миром, такие как базы данных, сетевые службы или пользовательский интерфейс. В чистой архитектуре они располагаются на внешних слоях и общаются с бизнес-логикой через определённые границы.
Использование принципа инверсии зависимостей позволяет уменьшить связность компонентов и упростить тестирование. Важно помещать всю логику преобразования данных для коммуникации с этими интерфейсами на их сторону границы.
Такая структурированность делает систему более гибкой и масштабируемой, облегчает поддержку и реализацию новых функций без риска нарушения основного функционала.
Плюсы:
Тестируемость: Благодаря разделению логики приложения от внешних элементов, тестирование становится более простым и эффективным.
Гибкость: Изменение внешних компонентов не затрагивает основную бизнес-логику, что делает систему гибкой к изменениям. Изменение одной части системы минимально сказывается на других.
Удобство поддержки: четкая структура делает проще исправление ошибок и добавление новых функций.
Масштабируемость: систему легче масштабировать благодаря независимости компонентов.
Минусы:
Сложность: Для новых разработчиков может быть сложно понять все слои архитектуры и правильно в них ориентироваться.
Время на реализацию: Разработка с использованием чистой архитектуры требует больше времени из-за необходимости создания многослойной структуры.
Перегрузка проектирования: Иногда такая детализация может быть излишней для маленьких или простых проектов.
Сложность реализации: требует тщательного понимания всех её компонентов и того как они сочетаются в единую систему.
Скорость разработки может снижаться из-за необходимости построения дополнительных уровней абстракции.
Нужен высокий уровень дисциплины со стороны команд разработчиков для поддержания соответствия структуры принципам Чистой Архитектуры.
Использование чистой архитектуры – это инвестиция в будущее вашего проекта за счет возможной переплаты временем на текущий момент. Важно оценить объем проекта и потенциальные выгоды от её применения перед тем как принять решение о её использовании.
Ключевое здесь – баланс между нужной структурностью кода для его будущего расширения и поддержки, без излишеств, которые могут замедлить начальное развитие продукта.
Go up