generated from VLADIMIR/template
update
This commit is contained in:
+11
-8
@@ -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`-пакетом без конкретной общей ответственности.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user