28Jun
Технологии / Разработка программного обеспечения 5 minutes to read

Понимание Чистой Архитектуры

В постоянно развивающемся мире разработки программного обеспечения создание масштабируемых, поддерживаемых и тестируемых приложений имеет первостепенное значение. Один архитектурный подход, который приобрел значительную популярность для достижения этих целей, - это Чистая Архитектура. Роберт С. Мартин, также известный как «Дядя Боб», представил Чистую Архитектуру как философию проектирования программного обеспечения, которая приоритизирует разделение обязанностей и поддерживаемость. В своей основе Чистая Архитектура делит приложение на слои, каждый из которых имеет свою собственную ответственность, что упрощает управление и эволюцию. Приложения, которые следуют принципам Инверсии Зависимостей и Проектирования, ориентированного на предметную область (DDD), воплощают Чистую Архитектуру.

Чистая архитектура способствует структуре программного обеспечения для улучшенной тестируемости, поддерживаемости и масштабируемости. Она отделяет заботы и поддерживает гибкую кодовую базу, чтобы адаптироваться к развивающимся требованиям и технологиям.

Цели чистой архитектуры

Чистая архитектура нацелена на создание программного обеспечения, которое легко понимать, поддерживать и тестировать. Она подчеркивает разделение ответственности и создание четко определенных границ между различными частями приложения. Это разделение позволяет легче тестировать отдельные компоненты.

Преимущества чистой архитектуры

  • ➤ Независимость от фреймворка: Может использоваться с ASP.NET (Core), Java, Python и т. д., без зависимости от каких-либо конкретных библиотек программного обеспечения или проприетарного кода.
  • ➤ Тестируемость: Может использоваться с ASP.NET (Core), Java, Python и т. д., без зависимости от каких-либо конкретных библиотек программного обеспечения или проприетарного кода.
  • ➤ Независимость от пользовательского интерфейса: Логика отделена от пользовательского интерфейса, что упрощает смену технологий, например, переход с Angular на React или Blazor.
  • ➤ Независимость от баз данных: Четко разделяет вопросы доступа к данным, облегчая изменения с SQL Server на CosmosDB.
  • ➤ Независимость от внешних систем: Ядро полностью изолировано от внешнего мира, обеспечивая долговечность и простоту обновлений.
  • ➤ Свободное связывание: Способствует свободному связыванию между компонентами и слоями, что повышает поддерживаемость и масштабируемость.

Чистая Архитектура: Общая Картина

  • 1. Бизнес-логика и модель приложения в центре: Обеспечивает независимость и четкое определение ключевых аспектов программного обеспечения.
  • 2. Инверсия Зависимости: Бизнес-логика не зависит от доступа к данным или инфраструктуры; вместо этого инфраструктура зависит от ядра приложения.
  • 3. Ясные Абстракции в Ядре Приложения: Определяет четкие абстракции (интерфейсы), представляющие основные контракты.
  • 4. Реализация в Инфраструктурном Слое: Конкретные реализации находятся в инфраструктурном слое, обрабатывающем доступ к данным, внешние сервисы и т.д.
  • 5. Внутренний Поток Зависимостей: Все зависимости текут внутрь к Ядру Приложения, обеспечивая строгое разделение обязанностей.

Слои в Чистой Архитектуре

  • ➤ Слой Доменов: Ядро архитектуры, реализующее бизнес-логику без зависимостей от других слоев.
  • ➤ Слой Приложения: Средний слой, управляющий данными между слоями домена и представления/инфраструктуры.
  • ➤ Инфраструктурный Слой: Содержит классы для доступа к внешним ресурсам, таким как файловые системы, веб-сервисы и базы данных.
  • ➤ Слой Представления: Код UI, использующий ASP.NET Core для создания интерфейсов.
Чистая Архитектура; горизонтальный вид слоев

Проектирование, ориентированное на домен (DDD)

Проектирование, ориентированное на домен (DDD) — это набор принципов и паттернов для проектирования программного обеспечения, который сосредоточен на основном домене и его логике. DDD подчеркивает сотрудничество между техническими и предметными экспертами для итеративного уточнения концептуальной модели, которая отвечает сложным бизнес-требованиям. Ключевые концепции DDD включают:

• Сущности: Объекты с отдельной идентичностью, которые проходят через разные состояния в системе.
• Объекты Значения: Неизменяемые объекты, которые представляют собой описательный аспект домена без концептуальной идентичности.
• Агрегаты: Группа объектов домена, которые рассматриваются как единое целое для изменений данных.
• Репозитории: Механизмы для инкапсуляции хранения, извлечения и поведения поиска, имитирующие коллекцию объектов.

Тестирование в Чистой Архитектуре

Тестирование в Чистой Архитектуре включает в себя независимое тестирование каждого слоя, чтобы гарантировать, что все компоненты работают корректно и правильно взаимодействуют друг с другом. Это очень важный шаг и значительно уменьшает сложность.

  1. ➤ Мокирование: Создание объектов, которые имитируют поведение реальных объектов. В этом случае вы можете замокировать свои репозитории базы данных без фактической реализации.
  2. ➤ Внедрение Зависимостей: Передача зависимостей (таких как репозитории) в ваши сценарии использования или сервисы, чтобы упростить юнит-тестирование.
  3. ➤ Изоляция: Обеспечение того, чтобы каждый тест был независимым и не зависел от состояния или данных других тестов.

Реализация Чистой Архитектуры

  • 1. Конфигурация Слоя Доменов: Определите сущности, перечисления, исключения, интерфейсы и типы.
  • 2. Конфигурация Приложенческого Слоя: Напишите бизнес-логику и сервисные интерфейсы, поддерживая слабую связанность.
  • 3. Конфигурация Инфраструктурного Слоя: Реализуйте доступ к данным и взаимодействие с внешними ресурсами на основе интерфейсов ядра.
  • 4. Конфигурация Презентационного Слоя: 4. Конфигурация Презентационного Слоя:

Принципы, которые следует соблюдать

1. Разделение Ответственностей: Избегайте смешивания различных кодовых обязанностей в одном методе/классе/проекте.
2. Единственная Ответственность: Каждый модуль/компонент должен иметь только одну причину для изменения.
3. Не Повторяйтесь (DRY): Избегайте дублированного кода или логики.
4. Инверсия Зависимостей: Политики высокого уровня не должны зависеть от деталей низкого уровня; используйте внедрение зависимостей для продвижения слабой связанности.

Заключение

Чистая Архитектура предоставляет надежную основу для построения микросервисов с использованием .NET Core Web API. Соблюдая принципы разделения обязанностей и инверсии зависимостей, разработчики могут создавать масштабируемые, поддерживаемые и тестируемые приложения. Принятие Чистой Архитектуры обеспечивает прочную основу для постоянно меняющихся требований современного программного обеспечения.

Узнайте больше на нашем GitHub

Nuwan Pradeep
Full Stack Engineer