TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #2856 1.86K
Чистая архитектура (Clean Architecture)
(продолжение предыдущего поста)

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

Архитектура обычно делится на четыре основных слоя (от внутреннего к внешнему):

1. Domain (Домен)
- Назначение: содержит ключевые бизнес-правила и логику предприятия — "сердце" приложения.
- Компоненты:
- Entities (сущности) — основные объекты бизнес-логики (например, пользователи, заказы).
- Value Objects (объекты-значения) — неизменяемые данные, характеризующие сущности.
- Exceptions (исключения) — обработка ошибок, связанных с бизнес-логикой.
- Domain Events (доменные события) — уведомления о важных изменениях в состоянии домена.
- Enums (перечисления) — набор констант для типизации данных.
- Repositories (репозитории) — абстракции для доступа к данным, отделяющие домен от инфраструктуры.
- Особенность: этот слой не зависит от внешних технологий (баз данных, фреймворков).

2. Application (Прикладной слой)
- Назначение: реализует сценарии использования (use cases) и координирует работу домена.
- Компоненты:
- Use Cases (сценарии использования) — логика взаимодействия пользователя с системой (например, «создать заказ»).
- Application Services (сервисные компоненты) — связующее звено между use cases и доменом.
- Commands (команды) — запросы на изменение состояния системы.
- Queries (запросы) — получение данных из системы.
- External Interfaces (внешние интерфейсы) — точки взаимодействия с внешними сервисами.
- Особенность: зависит от домена, но не от инфраструктуры.

3. Infrastructure (Инфраструктурный слой)
- Назначение: отвечает за внешние зависимости — базы данных, API, облачные сервисы и т. д.
- Компоненты:
- Databases (базы данных) — хранение данных.
- Identity Providers (провайдеры аутентификации) — управление учётными записями.
- HTTP Clients (HTTP-клиенты) — взаимодействие с внешними API.
- Cloud Storage (облачное хранилище) — хранение файлов.
- Email (электронная почта) — отправка уведомлений.
- Message Brokers (брокеры сообщений) — асинхронная обработка событий.
- Repository Impl. (реализации репозиториев) — конкретные классы для работы с данными (например, ORM).
- Особенность: реализует интерфейсы, определённые в прикладном слое.

4. Presentation (Представления/Интерфейс)
- Назначение: точка входа в систему — обрабатывает пользовательские запросы и возвращает ответы.
- Компоненты:
- API Endpoints (точки API) — URL-адреса для взаимодействия с приложением.
- Services (DI) — сервисы, управляемые контейнером внедрения зависимостей (Dependency Injection).
- gRPC, GraphQL, ASP.NET — технологии для построения API.
- Middleware (промежуточное ПО) — логика, выполняемая до/после обработки запроса (аутентификация, логирование).
- Exceptions (исключения) — обработка ошибок на уровне интерфейса.
- Особенность: зависит от прикладного слоя, но не знает о домене напрямую.

### Ключевые принципы
- Инверсия зависимостей (Dependency Inversion): внутренние слои (домен, приложение) не зависят от внешних (инфраструктура, представление). Зависимости направлены внутрь.
- Слабая связанность: изменение одного слоя минимально влияет на другие.
- Тестируемость: домен и прикладной слой легко тестируются, так как не зависят от внешних систем.
- Гибкость: можно менять технологии (например, базу данных или фреймворк) без переписывания бизнес-логики.

В итоге чистая архитектура обеспечивает:
- чёткое разделение ответственности между слоями;
- независимость бизнес-логики от инфраструктуры;
- удобство тестирования и поддержки кода;
- возможность масштабирования и замены технологий.
Telegram METANIT.COM Чистая архитектура (Clean Architecture) (продолжение в следующем посте)
  • ❤ 7
  • 👍 3
  • 👏 2
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →