Зафиксировать правило фабрик и билдеров в код-стайле
ci / build-test (pull_request) Successful in 2m49s
ci / build-test (pull_request) Successful in 2m49s
This commit is contained in:
@@ -103,6 +103,25 @@
|
|||||||
- Асинхронность: суффикс `Async`, `CancellationToken` пробрасывать до конца; `.Result` / `.Wait()`
|
- Асинхронность: суффикс `Async`, `CancellationToken` пробрасывать до конца; `.Result` / `.Wait()`
|
||||||
запрещены — только `await`.
|
запрещены — только `await`.
|
||||||
|
|
||||||
|
### 4.1. Фабрики и билдеры
|
||||||
|
|
||||||
|
- **Нетривиальные объекты с интерфейсом создаются только фабриками.** Реализация сервиса/адаптера,
|
||||||
|
у которого есть порт-интерфейс, не создаётся прямым `new` в прикладном коде или композиционном корне —
|
||||||
|
только внутри фабрики. Форма пары: `IXxxFactory` (порт фабрики) + `XxxFactory` (реализация), метод
|
||||||
|
`Create(...)` возвращает **интерфейс** готового объекта (`ISecretCipher`, `IFileStorage`, …).
|
||||||
|
- Фабрика сама регистрируется в DI (`AddScoped`/`AddSingleton<IXxxFactory, XxxFactory>()`) — контейнер
|
||||||
|
конструирует её без `new`; зависимости фабрики — тоже DI.
|
||||||
|
- **Билдер** (`IXxxBuilder`/`XxxBuilder`) добавляется, когда объект собирается итеративно из многих частей
|
||||||
|
или опций; фабрика делегирует сборку билдеру, а не повторяет её.
|
||||||
|
- Исключения из правила (прямой `new` допустим):
|
||||||
|
- DTO, рекорды, value-объекты, `Options`/`Settings`-снимки;
|
||||||
|
- исключения (`*Exception`) и примитивы/BCL-типы (`StringBuilder`, `NpgsqlConnection`, `MinioClient`, …);
|
||||||
|
- статические классы и хэлперы без состояния (фабрику для них не заводим);
|
||||||
|
- EF-конфигурации (`IEntityTypeConfiguration`) — это метаданные модели, а не прикладные объекты;
|
||||||
|
- обёртки ресурсов без порт-интерфейса (gRPC-соединения с `IDisposable`);
|
||||||
|
- объекты без порт-интерфейса, создаваемые контейнером (`AddScoped<Concrete>()`).
|
||||||
|
- Тесты могут конструировать проверяемый тип прямым `new` — это часть самого теста, а не прикладного кода.
|
||||||
|
|
||||||
## 5. Комментирование кода
|
## 5. Комментирование кода
|
||||||
|
|
||||||
Все комментарии — на русском языке.
|
Все комментарии — на русском языке.
|
||||||
|
|||||||
Reference in New Issue
Block a user