Статья опубликована в рамках: Научного журнала «Студенческий» № 42(338)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6
ПРИМЕНЕНИЕ ПРИНЦИПОВ CLEAN ARCHITECTURE ПРИ РАЗРАБОТКЕ ПРИЛОЖЕНИЙ НА ASP.NET CORE
APPLICATION OF THE PRINCIPLES OF CLEAN ARCHITECTURE IN THE DEVELOPMENT OF APPLICATIONS ON ASP.NET CORE
Kulebakin Ilya Ivanovich
Student, Department of Automation and Information Systems, Siberian State Industrial University,
Russia, Novokuznetsk
АННОТАЦИЯ
В статье рассматривается архитектурный подход Clean Architecture как средство построения гибких и сопровождаемых программных систем. Описываются ключевые принципы разделения ответственности между архитектурными слоями и изоляции предметной логики от инфраструктурных зависимостей. Особое внимание уделяется практической реализации данного подхода на платформе ASP.NET Core, включая организацию слоёв приложения, использование механизмов внедрения зависимостей и применение паттерна Mediator. На примерах демонстрируются подходы к реализации бизнес-правил в сущностях предметной области и к модульному тестированию прикладных сценариев. Показано, что применение принципов Clean Architecture способствует снижению чувствительности архитектуры к изменениям требований и технологий.
ABSTRACT
The article discusses the architectural approach of Clean Architecture as a means of building flexible and maintainable software systems. The key principles of separation of responsibilities between architectural layers and isolation of subject logic from infrastructure dependencies are described. Special attention is paid to the practical implementation of this approach on the platform ASP.NET Core, including the organization of application layers, the use of dependency injection mechanisms, and the use of the Mediator pattern. The examples demonstrate approaches to implementing business rules in domain entities and to unit testing of application scenarios. It is shown that the application of the principles of Clean Architecture helps to reduce the sensitivity of architecture to changes in requirements and technologies.
Ключевые слова: Clean Architecture, ASP.NET Core, внедрение зависимостей, бизнес-правила, прикладные сценарии, модульное тестирование.
Keywords: Clean Architecture, ASP.NET Core, dependency injection, business rules, application scenarios, unit testing.
Архитектура программной системы, как фундамент, определяет её способность к масштабированию, модификации, сопровождению и тестированию. В условиях современной промышленной разработки особую актуальность приобретают подходы, гарантирующие изоляцию бизнес-логики от инфраструктурных зависимостей. Одним из таких подходов является Clean Architecture (Чистая архитектура) — архитектурный стиль, ориентированный на построение модульных, тестируемых и независимых систем. В качестве практической платформы для иллюстрации принципов Clean Architecture в статье используется ASP.NET Core со встроенным механизмом инверсии зависимостей и модульной организацией компонентов [3]. Цель данной статьи заключается в систематизации ключевых принципов Clean Architecture и демонстрации их практического применения.
Для осмысления практических аспектов Clean Architecture рассмотрим её базовую структурную модель и назначение основных архитектурных слоёв. Clean Architecture представляет собой архитектурный подход, предложенный инженером и автором Робертом Сесилом Мартином. Главная идея подхода заключается в разделении приложения на слои с чётко определённой зоной ответственности, где внутренние слои остаются логически изолированными от внешних, а зависимости направлены внутрь, к предметной области (рисунок 1). Такой принцип построения обеспечивает устойчивость бизнес-логики к изменениям инфраструктурных компонентов и используемых технологий, позволяя вносить изменения в отдельные части системы без существенного влияния на её ядро [2].

Рисунок 1. Архитектурная модель Clean Architecture
Самым внутренним слоем является Entities — ядро предметной области, в котором определяются бизнес-объекты, их поведение и инварианты. Сущности полностью изолированы от инфраструктуры и не содержат ссылок на фреймворки, базы данных, контроллеры, логгеры, DTO и другие внешние компоненты. Все детали реализации размещаются за пределами этого слоя, что обеспечивает стабильность предметной логики и её независимость от технологий.
Над слоем Entities располагается слой Application (Use Cases). Он описывает сценарии взаимодействия с системой, координирует выполнение бизнес-операций и управляет потоком данных между сущностями. Каждый сценарий оформляется в виде команды (command) или запроса (query) и обрабатывается компонентом, не зависящим от пользовательского интерфейса и механизмов хранения данных [1]. В практических реализациях на ASP.NET Core данный механизм нередко организуется с использованием библиотеки MediatR, реализующей паттерн Mediator, за счёт чего достигается ослабление прямых зависимостей между компонентами.
Следующим архитектурным уровнем является слой Interface Adapters, задачей которого выступает преобразование данных между внутренними структурами системы и внешними форматами. В данном слое размещаются контроллеры, презентеры (компоненты, формирующие данные для представления), модели представления, а также адаптеры, обеспечивающие приведение внешних данных к формату, ожидаемому слоями Use Cases и Entities.
На внешнем уровне архитектуры располагается слой Infrastructure (Frameworks & Drivers), включающий конкретные реализации интерфейсов и механизмы взаимодействия с внешней средой. К таким механизмам относятся базы данных, сетевые API, файловые системы, средства логирования, пользовательские интерфейсы и другие технологические компоненты. Данный слой зависит от абстракций внутренних уровней, но не наоборот, что позволяет заменять инфраструктурные реализации без изменения бизнес-логики и прикладных сценариев системы [4].
Для демонстрации практических аспектов Clean Architecture рассмотрим процесс конфигурации приложения в ASP.NET Core. В рамках данного подхода связывание абстракций с конкретными реализациями выполняется во внешнем слое системы. На листинге 1 представлена регистрация зависимостей во внешнем слое приложения.
builder.Services.AddScoped<IInvoiceRepository, EfInvoiceRepository>();
builder.Services.AddScoped<IEmailService, SmtpEmailService>();
builder.Services.AddMediatR(cfg =>
cfg.RegisterServicesFromAssembly(typeof(CreateInvoiceCommand).Assembly));
Рисунок 1. Регистрация зависимостей во внешнем слое приложения
Приведённый пример демонстрирует практическую реализацию принципа инверсии зависимостей, при котором инфраструктурные компоненты связываются с абстракциями исключительно во внешнем слое приложения. В более широком архитектурном контексте применение внедрения зависимостей в сочетании с физическим разделением слоёв обеспечивает дополнительные архитектурные гарантии, выражающиеся в предотвращении нарушения границ между архитектурными уровнями на этапе сборки проекта [7].
После конфигурации зависимостей и определения архитектурных границ следует кратко охарактеризовать слой, через который клиенты взаимодействуют с системой. Слой Presentation относится к уровню Interface Adapters, он отвечает за приём входных данных, их первичную обработку и передачу управления в соответствующие прикладные сценарии без включения предметной логики. В приложениях на ASP.NET Core данный слой представлен контроллерами и обработчиками Minimal API, которые выполняют адаптацию входных запросов и передачу управления в соответствующие use case [5]. Данный слой не содержит бизнес-логики и выполняет адаптационные функции.
Тестируемость — одно из ключевых преимуществ Clean Architecture. Поскольку слой Application изолирован от инфраструктурных зависимостей, каждый use case можно протестировать независимо от базы данных, веб-фреймворка или внешних сервисов. На рисунке 2 представлен пример модульного теста, проверяющего логику обработчика прикладного сценария (use case) с использованием mock-объекта репозитория.

Рисунок 2. Пример модульного тестирования обработчика прикладного сценария (use case)
Частой ошибкой при использовании Clean Architecture становится создание «анемичных» моделей, когда сущности не содержат поведения и выполняют лишь роль контейнеров для данных. Такое упрощение приводит к тому, что бизнес-логика фрагментируется по слоям, перемещается в сервисы, нарушается инкапсуляция, и слой Entities утрачивает свою функцию как ядра доменной модели. В правильной реализации сущности обладают поведенческой логикой, отражающей бизнес-правила, и все изменения их состояния происходят строго через методы самих сущностей [6]. Рассмотрим реализацию данного подхода на примере метода Pay() в сущности Invoice (рисунок 3).

Рисунок 3. Реализация бизнес-правил в сущности предметной области
Метод Pay() не только фиксирует факт оплаты, но и проверяет выполнение бизнес-ограничений, связанных с невозможностью повторной оплаты и превышением допустимого срока. Размещение таких проверок внутри сущности исключает дублирование условий в других частях приложения и гарантирует единообразие правил.
В заключение отметим, что проектирование системы в соответствии с принципами Clean Architecture позволяет обеспечить гибкость архитектуры и удобство сопровождения. Разделение ответственности между компонентами и изоляция предметной логики от внешних факторов делают архитектуру менее чувствительной к изменениям требований и технологий. Такой подход способствует долгосрочному развитию программных систем в условиях изменяющейся технологической среды.
Список литературы:
- Калашников Н. А. Применение архитектурных паттернов в построении чистой архитектуры веб-приложений // Universum: технические науки. 2024. № 12 (129). [Электронный ресурс]. — Режим доступа: https://cyberleninka.ru/article/n/primenenie-arhitekturnyh-patternov-v-postroenii-chistoy-arhitektury-veb-prilozheniy (дата обращения: 18.12.2025).
- Мартин Р. Чистый код: создание, анализ и рефакторинг : пер. с англ. — СПб. : Питер, 2022. — 464 с.
- Общие сведения об ASP.NET Core // Microsoft Learn [Электронный ресурс]. — Режим доступа: https://learn.microsoft.com/ru-ru/aspnet/core/overview?view=aspnetcore-10.0 (дата обращения: 20.12.2025).
- Распространенные архитектуры веб-приложений // Microsoft Learn: .NET Architecture Guide [Электронный ресурс]. Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures (дата обращения: 23.12.2025).
- Семёнов М. Г. Анализ тенденций развития технологий разработки информационных систем на примере ASP. NET CORE //Наука-образованию, производству, экономике. – 2022. – С. 43-44.
- Evans E. Domain-Driven Design: Tackling Complexity in the Heart of Software. — Boston: Addison-Wesley, 2004. — 560 p. — ISBN 978-0321125217.
- Seemann M. Dependency Injection in .NET. — Manning Publications, 2011. — 584 p. — ISBN 978-1935182504.


Оставить комментарий