Implementation Blueprint
Назначение
Документ описывает, как стандартная backend-реализация Pin должна быть организована на уровне слоев, пакетов, feature slices и повторяемого runtime flow. Это не сервисная спецификация, а корпоративный blueprint для команд реализации.
Принципы
- Сервис владеет только своим состоянием, своей схемой и своими контрактами.
- Общий код живет только в
src/building-blocks/*,src/shared/*илиsrc/contracts/*. Domainне зависит от ASP.NET Core, EF Core, MassTransit, Redis, Elasticsearch, ClickHouse и текущего HTTP-запроса.Applicationопределяет commands, queries, validators, ports, orchestration и business policies.Infrastructureреализует persistence, messaging, caching, search, analytics и integration adapters.Apiсобирает runtime: controllers, auth, policies, middleware, DI, OpenAPI.
Целевая Структура Сервиса
src/services/<service-name>/
<Service>.Api/
<Service>.Application/
<Service>.Domain/
<Service>.Infrastructure/
<Service>.Background/
<Service>.Migrator/
<Service>.Contracts/
Структура Application Layer
<Service>.Application/
<FeatureGroup>/
<Feature>/
<Feature>Command.cs
<Feature>CommandHandler.cs
<Feature>CommandResult.cs
<Feature>CommandValidator.cs
<Feature>Query.cs
<Feature>QueryHandler.cs
<Feature>QueryResult.cs
<Feature>QueryValidator.cs
<Feature>Policy.cs
<Feature>Mapping.cs
Shared/
Ports/
Models/
Policies/
Правила:
- один use case живет в одной папке;
- feature naming отражает бизнес-действие;
- пустые технические папки
Commands,Queries,Handlers,Validatorsна корне запрещены; - feature-specific models и policies лежат рядом с feature;
- shared contracts выделяются только при реальном повторном использовании.
Остальные Слои
Apiгруппирует endpoints и runtime composition, но не содержит business decisions.Domainгруппирует aggregates, entities, value objects и invariants.Infrastructureсодержит repositories, DbContext, consumers support, adapters и projection implementations.Backgroundсодержит consumers и jobs, зеркалируя feature groups.Testsповторяют namespace production-кода и покрывают риски на соответствующем уровне.
Runtime Flow
Поток Добавления Нового Поведения
- Обновить документацию: contract, entity, event, runbook, dashboard или task spec.
- Проверить source of truth, ownership и integration boundaries.
- Создать feature slice в
Application. - Описать transaction/read boundary, side effects, idempotency и observability.
- Реализовать persistence и adapters через общие building blocks.
- Добавить tests по риску изменения.
- Обновить связанные документы и operational artifacts.
Когда Нужен Rich Domain Model
Rich model обязателен там, где есть:
- инварианты;
- state transitions;
- audit-sensitive decisions;
- финансовые проводки или учетные движения;
- конкурентные изменения;
- approval workflows;
- сложные policy rules.
Anemic/read models допустимы для:
- справочников;
- projections;
- search documents;
- dashboard rows;
- export rows;
- простых административных представлений без собственных инвариантов.
Foundation Пакеты
Talent.Common.DomainTalent.Common.ApplicationTalent.Common.InfrastructureTalent.Common.MessagingTalent.Common.ObservabilityTalent.Common.IdentityTalent.Common.Domain.SearchTalent.Common.Analytics
Обратные ссылки
Автоссылки: где используется этот документ.
- adr (1): ADR-0012: Application Feature Slices
- architecture-overview.md (1): Архитектура Pin
- backend-shared-standards-index.md (1): Backend Shared Standards Index