Перейти к основному содержимому

4.14. Структура кодовой базы

Разработчику Архитектору Инженеру

Структура кодовой базы в «чистой архитектуре»

Отличный пример структуры папок — это проявление слоистой архитектуры с элементами hexagonal (ports & adapters) и domain-driven design.

Ниже — назначение типичных директорий:

ДиректорияНазначениеКомментарий
entity, value-objectsЯдро предметной области. Идентичность и инварианты бизнес-логики.Должны быть свободны от зависимостей (чистые классы).
use-casesОркестрация операций над сущностями. Реализуют бизнес-транзакции.Зависят от entity, но не от инфраструктуры.
interface / portsАбстракции (интерфейсы) для внешних зависимостей (БД, API, FS).Определяют что, но не как.
infrastructureРеализации интерфейсов из interface.Содержат SqlConnection, HttpClient, File.WriteAllText и т.п.
servicesОбщая логика, не привязанная напрямую к use-case (например, хэширование, валидация).Может быть переиспользована.
dtosData Transfer Objects — для сериализации и межслойного обмена.Должны быть простыми контейнерами данных.
handlers, events, event-dispatcherРеализация событийной модели (in-process).Часто — mediator или observer pattern.
decoratorsCross-cutting concerns (логгирование, кэширование, валидация) через декораторы.Соответствует принципу Open/Closed.
filters, interceptorsОбработка запросов/ответов на уровне фреймворка (например, в ASP.NET Core).Не должны содержать бизнес-логику.
errorsСемантические типы ошибок (не Exception напрямую).Позволяют явно обрабатывать failure modes.
shared, utils, constants, typesВспомогательные элементы.Следует минимизировать — избыток utils признак низкой связанности модели.

Такая структура упрощает модульное тестирование, заменяемость компонентов и поддержку. Однако она оправдана при достаточной сложности предметной области; для простых CRUD-приложений — избыточна.