Внедрить фабрики объектов вместо прямых new #14

Merged
rust merged 8 commits from t12_object_factories into main 2026-09-13 04:25:18 +03:00
Owner

#12

Что сделано

  • Создание сервисов с порт-интерфейсом перенесено в фабрики IXxxFactory/XxxFactory (метод Create() возвращает интерфейс готового объекта):
    • ISecretCipherFactoryAesGcmSecretCipher;
    • ITenantLimitStoreFactoryTenantLimitStore;
    • IAiClassifierFactoryBudgetedAiClassifier;
    • IAiToolsFactoryBudgetedAiTools;
    • IFileStorageFactoryLocalFileStorage/MinioFileStorage.
  • Регистраторы AddDealPersistence, AddDealIntegrations, AddDealSecurity, AddDealFileStorage переведены на фабрики; DiscoveryWorkerService больше не имеет fallback new DiscoverySearchErrorCounter() (счётчик — обязательная DI-зависимость).
  • Правило фабрик/билдеров и список исключений добавлены в docs/spec/Код-стайл-Дейл.md (§4.1).
  • Добавлен тест FileStorageFactoryTests (выбор Local/MinIO).

Исключения (осознанно вне правила)

  • EF-конфигурации IEntityTypeConfiguration — метаданные модели EF;
  • Ai/Ml/TelegramGrpcConnection — обёртки ресурсов с IDisposable без порт-интерфейса;
  • статичные хэлперы и объекты без порт-интерфейса, создаваемые контейнером.

Проверки

  • Сборка 5 решений: 0 предупреждений / 0 ошибок.
  • Тесты: core 1342, telegram 130, ai 52, ml 38, storage 9 — зелёные.

Затрагивает core (инфраструктура, регистраторы, Discovery); фронт не трогался.

https://gitea.khomegeneric.keenetic.pro/rust/Deal/issues/12 ## Что сделано - Создание сервисов с порт-интерфейсом перенесено в фабрики `IXxxFactory`/`XxxFactory` (метод `Create()` возвращает интерфейс готового объекта): - `ISecretCipherFactory` — `AesGcmSecretCipher`; - `ITenantLimitStoreFactory` — `TenantLimitStore`; - `IAiClassifierFactory` — `BudgetedAiClassifier`; - `IAiToolsFactory` — `BudgetedAiTools`; - `IFileStorageFactory` — `LocalFileStorage`/`MinioFileStorage`. - Регистраторы `AddDealPersistence`, `AddDealIntegrations`, `AddDealSecurity`, `AddDealFileStorage` переведены на фабрики; `DiscoveryWorkerService` больше не имеет fallback `new DiscoverySearchErrorCounter()` (счётчик — обязательная DI-зависимость). - Правило фабрик/билдеров и список исключений добавлены в `docs/spec/Код-стайл-Дейл.md` (§4.1). - Добавлен тест `FileStorageFactoryTests` (выбор Local/MinIO). ## Исключения (осознанно вне правила) - EF-конфигурации `IEntityTypeConfiguration` — метаданные модели EF; - `Ai/Ml/TelegramGrpcConnection` — обёртки ресурсов с `IDisposable` без порт-интерфейса; - статичные хэлперы и объекты без порт-интерфейса, создаваемые контейнером. ## Проверки - Сборка 5 решений: 0 предупреждений / 0 ошибок. - Тесты: core 1342, telegram 130, ai 52, ml 38, storage 9 — зелёные. Затрагивает core (инфраструктура, регистраторы, Discovery); фронт не трогался.
stepan added 2 commits 2026-09-13 03:42:27 +03:00
Создание сервисов с порт-интерфейсом перенесено в IXxxFactory:
шифр секретов, хранилище лимитов, ИИ-классификатор, ИИ-инструменты,
файловое хранилище (Local/MinIO). Регистраторы и DiscoveryWorkerService
больше не создают реализации напрямую. Добавлен тест FileStorageFactory.
stepan requested review from rust 2026-09-13 03:42:28 +03:00
stepan added 1 commit 2026-09-13 03:54:38 +03:00
TelegramIngressTestHost больше не мутирует процессную переменную
DEAL_SERVICE_TOKEN: токен задаётся in-memory конфигурацией хоста.
Три ingress-тест-класса шли параллельно и перетирали env друг другу.
stepan added 1 commit 2026-09-13 03:59:34 +03:00
По код-стайлу §11 метод Create реализуется явно
(ISecretCipher ISecretCipherFactory.Create()), интерфейс вызывается
только по порту; тест фабрики типизирован интерфейсом.
stepan added 2 commits 2026-09-13 04:10:25 +03:00
stepan added 2 commits 2026-09-13 04:17:46 +03:00
rust merged commit ae7014ccda into main 2026-09-13 04:25:18 +03:00
rust deleted branch t12_object_factories 2026-09-13 04:25:19 +03:00
Sign in to join this conversation.