- Published on
Как применять Clean Architecture в ASP.NET CORE
- Authors
- Name
- Николай Маракасов
Введение
Clean Architecture предлагает структурировать приложение по двум измерениям:
- Разделение по пользовательским сценариям на основе принципа единой ответственности.
- Разделение на основе правил зависимостей.
В этой статье мы рассмотрим практический пример реализации этого подхода.
Реализация

Каждый слой на диаграмме можно реализовать как отдельный проект в ASP.NET приложении.
Entities
Это ядро приложения, которое хранит бизнес-правила, инкапсулированные через сущности, агрегаты, доменные события и доменные сервисы. Я размещаю интерфейсы репозиториев на этом уровне рядом с агрегатами или сущностями. Поскольку здесь хранятся не только сущности, я называю проект Domain. Также встречаются названия: Core или ApplicationCore. Этот уровень не зависит от других и содержит только чистые бизнес-правила и абстракции.
Use Cases
Этот уровень я называю Application. Он зависит только от уровня Domain и реализует бизнес-сценарии, следуя принципу единой ответственности. Задачи уровня:
- Принимать DTO от уровня API.
- Использовать интерфейсы репозиториев для получения доменных сущностей.
- Выполнять необходимые операции и возвращать результат в виде DTO.
Infrastructure
Этот уровень отвечает за:
- Доступ к данным.
- Вызовы внешних сервисов.
- Коммуникации с брокерами сообщений и т. д.
Я разделяю проект на папки по функциональной области. Например:
- DataAccess: содержит
DbContext
, имплементации репозиториев и запросов, маппинги типов для EntityFramework, а также директорию с миграциями.
Если приложение становится большим, этот уровень можно разделить на отдельные проекты.
Web, UI, API
Это входная точка для клиентов приложения. На этом уровне определяем:
- Наборы доступных API-методов.
- Настройки DI (Dependency Injection).
- Аутентификацию и авторизацию.
- Конфигурацию, логирование и другие аспекты, связанные с фреймворком.
Финальная структура проекта

Заключение
Clean Architecture можно реализовать по-разному:
- В рамках одной сборки через папки.
- Отдельными проектами.
- Объединяя несколько уровней в один.
Главное — придерживаться правил зависимостей и опираться на пользовательские сценарии. В следующих статьях я подробно рассмотрю уровень Application и его взаимодействие с Domain.