Чистая архитектура способствует структуре программного
обеспечения для улучшенной тестируемости,
поддерживаемости и масштабируемости. Она отделяет
заботы и поддерживает гибкую кодовую базу, чтобы
адаптироваться к развивающимся требованиям и
технологиям.
Цели чистой архитектуры
Чистая архитектура нацелена на создание программного
обеспечения, которое легко понимать, поддерживать и
тестировать. Она подчеркивает разделение ответственности
и создание четко определенных границ между различными
частями приложения. Это разделение позволяет легче
тестировать отдельные компоненты.
Преимущества чистой архитектуры
-
➤ Независимость от фреймворка: Может
использоваться с 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. Конфигурация Инфраструктурного Слоя:
Реализуйте доступ к данным и взаимодействие с внешними
ресурсами на основе интерфейсов ядра.
-
4. Конфигурация Презентационного Слоя:
4. Конфигурация Презентационного Слоя:
Принципы, которые следует соблюдать
1. Разделение Ответственностей: |
Избегайте смешивания различных кодовых обязанностей
в одном методе/классе/проекте.
|
2. Единственная Ответственность: |
Каждый модуль/компонент должен иметь только одну
причину для изменения.
|
3. Не Повторяйтесь (DRY): |
Избегайте дублированного кода или логики. |
4. Инверсия Зависимостей: |
Политики высокого уровня не должны зависеть от
деталей низкого уровня; используйте внедрение
зависимостей для продвижения слабой связанности.
|
Заключение
Чистая Архитектура предоставляет надежную основу для
построения микросервисов с использованием .NET Core Web
API. Соблюдая принципы разделения обязанностей и
инверсии зависимостей, разработчики могут создавать
масштабируемые, поддерживаемые и тестируемые приложения.
Принятие Чистой Архитектуры обеспечивает прочную основу
для постоянно меняющихся требований современного
программного обеспечения.
Узнайте больше на нашем GitHub