01. Слайсы: у каждой задачи своё место
Заказы — в Orders, оплата — в Billing. Слой отвечает за роль кода, слайс — за задачу продукта. Агент находит нужную часть и меняет её в заданных границах.
Это адаптация идей Feature-Sliced Design к .NET: разделение по смыслу, изоляция слайсов и явный публичный API. Здесь свои слои Clean Architecture и правило «слой = сборка».
| Слой / роль | Orders / заказы | Billing / оплата |
|---|---|---|
| Api · HTTP-вход | Api/Orders/Endpoints/ | Api/Billing/Endpoints/ |
| Application · сценарии | Application/Orders/Placement/ | Application/Billing/Invoicing/ |
| Domain · бизнес-правила | Domain/Orders/ | Domain/Billing/ |
| Infrastructure · адаптеры | Infrastructure/Orders/Postgres/ | Infrastructure/Billing/Payments/ |
.csproj. Host собирает приложение; для входа через очередь есть Consumers. Слайсы лежат прямо в слое, без промежуточного Features/.Обычный вход в слайс
Внешний код использует объявленный API сценария. Внутреннее устройство Placement/ можно менять без обхода всех потребителей.
Связь с соседним слайсом
Billing явно открывает API для Orders. Обычный Contracts/ не разрешает импорт соседа на том же слое; нужен X/Orders, аналог @x в FSD.
Направления слоёв и ещё несколько правил
| Откуда | Какие слои можно использовать |
|---|---|
| Host | Все остальные — собирает приложение |
| Api, Consumers | Application, Domain |
| Infrastructure | Application, Domain |
| Application | Domain |
| Domain | Ни один другой слой |
- Каждому Application-слайсу нужен вход в Api или Consumers. Доменные слайсы доступны верхним слоям независимо от имени слайса-потребителя.
- Папки внутри слайса называются по назначению:
Placement,Pricing.HelpersиUtilsне объясняют назначение. - Общие зарезервированные места —
Domain/SharedиInfrastructure/Persistence. Обвязка приложения живёт в Host. - Слой с кодом имеет одну сборку. Подключать чужие слои через
Compile Includeнельзя;ProjectReferenceподчиняется той же таблице. - Standalone-библиотека отмечает архитектуру как неприменимую с причиной.