Шаг 2: Структура проектов и зависимости
Создадим четыре проекта (по одному на каждый слой) и два тестовых. Затем настроим правильные зависимости между ними.
Зачем четыре проекта
Четыре проекта дают физическую изоляцию слоёв. Компилятор не позволит обратиться к классу из слоя, на который нет ссылки.
| Проект | Тип | Назначение |
|---|---|---|
| Domain | Class Library | Бизнес-правила |
| Application | Class Library | Координация операций |
| Infrastructure | Class Library | БД, внешние сервисы |
| API | Web API | HTTP endpoints |
Создание проектов в Rider
Domain (Class Library):
- Правый клик на
src-> Add -> New Project - Шаблон: Class Library, Name:
OrderManagement.Domain, Framework:.NET 10.0 - Удалите
Class1.cs
Application -- аналогично: OrderManagement.Application
Infrastructure -- аналогично: OrderManagement.Infrastructure
API (Web API):
- Шаблон: ASP.NET Core Web API, Name:
OrderManagement.API - Framework:
.NET 10.0
Тестовые проекты (xUnit Test Project):
OrderManagement.Domain.Testsв папкеtestsOrderManagement.Application.Testsв папкеtests
Настройка зависимостей
Domain <- ни от кого
Application <- от Domain
Infrastructure <- от Domain + Application
API <- от Application + Infrastructure
Добавление через Rider: правый клик на проект -> Add -> Reference -> выбрать нужные проекты.
Application -> Domain: ссылка на Domain
Infrastructure -> Domain + Application: ссылки на оба
API -> Application + Infrastructure: ссылки на оба
API не ссылается на Domain напрямую -- общение идёт через Application Layer (Commands, Queries, DTOs).
Проверка
dotnet build
Результат: Build succeeded. 0 Warning(s). 0 Error(s)
Структура на диске
OrderManagement/
├── OrderManagement.sln
├── src/
│ ├── OrderManagement.Domain/
│ ├── OrderManagement.Application/
│ ├── OrderManagement.Infrastructure/
│ └── OrderManagement.API/
└── tests/
├── OrderManagement.Domain.Tests/
└── OrderManagement.Application.Tests/
Файл .csproj -- XML-файл, описывающий проект: фреймворк, пакеты, ссылки. Rider редактирует его автоматически.