1. Создание проекта и слоёв¶
Цель¶
Создать решение ASP.NET Core Web API и подготовить многослойную структуру приложения ActivityMonitoring.
Объяснение¶
Проект делится на четыре слоя:
ActivityMonitoring.Api— HTTP API, контроллеры, Swagger, авторизация.ActivityMonitoring.Application— DTO, интерфейсы сервисов, бизнес-сценарии.ActivityMonitoring.Domain— сущности и enum без зависимости от инфраструктуры.ActivityMonitoring.Infrastructure— EF Core, репозитории, генераторы, отчёты.
На первом этапе вы не пишете бизнес-логику. Вы готовите основу, в которую дальше будет безопасно добавлять функциональность. Это похоже на создание каркаса здания: пока нет комнат и оборудования, но уже понятно, где будут стены, входы и коммуникации.
Важно сразу привыкнуть к правилу: файл должен находиться в том проекте, которому он соответствует по смыслу. Сущность пользователя не должна лежать в API, а контроллер не должен лежать в Infrastructure.
После этого этапа у вас ещё не будет работающей системы мониторинга, но будет правильная структура решения. Все следующие шаги будут опираться на неё.
Код¶
Сначала создаётся само решение и четыре проекта внутри него. Эти команды задают архитектурную границу: API будет принимать HTTP-запросы, Application — хранить сценарии и контракты, Domain — описывать предметные сущности, а Infrastructure — работать с внешними механизмами вроде базы данных.
mkdir ActivityMonitoring
cd ActivityMonitoring
dotnet new sln -n ActivityMonitoring
dotnet new webapi -n ActivityMonitoring.Api
dotnet new classlib -n ActivityMonitoring.Domain
dotnet new classlib -n ActivityMonitoring.Application
dotnet new classlib -n ActivityMonitoring.Infrastructure
dotnet sln add ActivityMonitoring.Api ActivityMonitoring.Domain ActivityMonitoring.Application ActivityMonitoring.Infrastructure
dotnet add ActivityMonitoring.Application reference ActivityMonitoring.Domain
dotnet add ActivityMonitoring.Infrastructure reference ActivityMonitoring.Application ActivityMonitoring.Domain
dotnet add ActivityMonitoring.Api reference ActivityMonitoring.Application ActivityMonitoring.Infrastructure
Удалите стандартный WeatherForecast, если он был создан шаблоном.
После создания проектов подготовьте папки под будущие классы. На этом этапе в них ещё может не быть кода, но структура заранее показывает, куда будут добавляться сущности, DTO, контроллеры, репозитории и отчёты на следующих шагах.
ActivityMonitoring.Domain/
Entities/
Enums/
ActivityMonitoring.Application/
Auth/
Analytics/
Events/
Reports/
Common/
ActivityMonitoring.Infrastructure/
Persistence/
Repositories/
Reports/
EventGeneration/
ActivityMonitoring.Api/
Controllers/
Теперь подключите NuGet-пакеты, без которых следующие этапы не смогут работать. EF Core нужен для базы данных и миграций, SQLite — для учебной локальной БД, а JwtBearer понадобится позже, когда API будет проверять токены пользователей.
dotnet add ActivityMonitoring.Infrastructure package Microsoft.EntityFrameworkCore
dotnet add ActivityMonitoring.Infrastructure package Microsoft.EntityFrameworkCore.Sqlite
dotnet add ActivityMonitoring.Infrastructure package Microsoft.EntityFrameworkCore.Design
dotnet add ActivityMonitoring.Api package Microsoft.EntityFrameworkCore.Design
dotnet add ActivityMonitoring.Api package Microsoft.AspNetCore.Authentication.JwtBearer
Результат¶
В конце проверьте сборку. Эта команда пока не проверяет бизнес-логику, но подтверждает, что проекты созданы корректно, ссылки между слоями не сломаны и пакеты восстановились.
Ожидаемый результат: Build succeeded.
Если сборка не проходит, чаще всего причина в неверно добавленной ссылке между проектами. Проверьте команды dotnet add ... reference ... и убедитесь, что Api ссылается на Application и Infrastructure, а Domain ни на кого не ссылается.