This commit is contained in:
2026-10-03 01:40:24 +07:00
parent fe6e47a581
commit 96edb0937e
+11 -8
View File
@@ -41,18 +41,21 @@ cmd/<name>/ сборка и запуск приложения
```text
cmd → app → services → repos
↘ modules
└──────────────→ modules
```
- По прикладной логике `app` зависит только от `services`; `proto` используется
как транспортный контракт. Прямые зависимости от `repos` и `modules` в
handlers и mapping запрещены.
- `cmd` собирает граф зависимостей и может импортировать `services`, `repos` и
`modules` для wiring.
- `modules` — технический слой, доступный из любого уровня (`cmd`, `app`,
`services`, `repos`). `proto` используется как транспортный контракт.
- Прямые зависимости `app` от `repos` запрещены в production-коде handlers и
mapping; прикладные операции идут через `services`.
- `cmd/<name>/main.go` — composition root: для инициализации и wiring он может
импортировать любой внутренний слой (`app`, `services`, `repos`, `modules`).
- `services` не импортируют `app` и `proto`.
- `repos` не знают о protobuf, HTTP, gRPC, ролях транспорта и UI.
- `modules` не знают о конкретном use case приложения. Если код нужен только
одному сервису, он остаётся в этом сервисе.
- `modules` не импортируют `app`, `services` и `repos`, не знают о конкретном
use case приложения и могут зависеть только от стандартной библиотеки и
других технических модулей без циклических зависимостей. Если код нужен
только одному сервису, он остаётся в этом сервисе.
- Циклические зависимости запрещены; не исправляй их дополнительным
`common`-пакетом без конкретной общей ответственности.