Шаг 3: NuGet-пакеты
NuGet -- менеджер пакетов для .NET (аналог npm для JavaScript). Установим библиотеки для каждого слоя.
Domain -- минимум зависимостей
В Domain устанавливаем только интерфейсы MediatR:
dotnet add src/OrderManagement.Domain package MediatR.Contracts
MediatR.Contracts -- пакет только с интерфейсами (INotification), без логики. Domain «знает» формат событий, но не зависит от реализации MediatR.
Application -- координация
dotnet add src/OrderManagement.Application package MediatR
dotnet add src/OrderManagement.Application package FluentValidation
dotnet add src/OrderManagement.Application package FluentValidation.DependencyInjectionExtensions
MediatR реализует паттерн Mediator -- контроллер отправляет Command, MediatR находит Handler и передаёт ему команду. FluentValidation описывает правила валидации в удобном виде: RuleFor(x => x.Name).NotEmpty().
Infrastructure -- база данных
dotnet add src/OrderManagement.Infrastructure package Microsoft.EntityFrameworkCore.SqlServer
dotnet add src/OrderManagement.Infrastructure package Microsoft.EntityFrameworkCore.Tools
Entity Framework Core -- ORM, переводящий работу с C# объектами в SQL-запросы. SqlServer -- провайдер для Microsoft SQL Server и Azure SQL.
API -- веб-сервер
dotnet add src/OrderManagement.API package Scalar.AspNetCore
dotnet add src/OrderManagement.API package Serilog.AspNetCore
Scalar -- современный UI для документации API (замена Swagger UI). В .NET 10 OpenAPI генерируется встроенным пакетом, Scalar визуализирует спецификацию. Serilog -- структурированное логирование с поддержкой Application Insights.
Тестовые проекты
dotnet add tests/OrderManagement.Domain.Tests package FluentAssertions
dotnet add tests/OrderManagement.Application.Tests package FluentAssertions
dotnet add tests/OrderManagement.Application.Tests package Moq
FluentAssertions: result.Should().Be(5) вместо Assert.Equal(5, result). Moq создаёт фейковые объекты для тестирования без реальной БД.
Проверка
dotnet build
В .csproj файле увидите установленные пакеты в секции <PackageReference>.