Описание функции
Единый tracker по результатам архитектурного аудита (Jul 2026): вынести бизнес-логику из god-контроллеров/SFC, дожать domain facades, убрать ETL из Utils, выровнять DI.
Поведение магазина не менять без отдельного product-issue. Цель — cost of change и файлы < 1000 LOC.
Проблема, которую решает
Аудит зафиксировал системный долг, а не один файл:
OrdersController ~1861 + OrderView ~2517 (пара HTTP ↔ UI)
- 10+ mgr-гридов 800–1800 LOC с копипастой каркаса
ImportCSV 999 в Utils/ (потолок AGENTS.md)
- Cart/Customer толще Order-facade; часть сервисов вне
ServiceRegistry
- Три поколения UI/API (Processors/ExtJS, Manager REST, Vue) без явного freeze-плана для legacy
Без трекера issues расходятся, порядок разреза теряется.
Предлагаемое решение
Порядок фаз (code judo)
| Фаза |
Issue |
Суть |
| 1 |
#338 |
OrdersController → thin + Services |
| 1b |
#339 |
OrderView → shell + секции (<1000) |
| 2 |
#354 |
Узкие grid composables (не magic framework) |
| 3 |
#344 → #368 |
ImportCSV split, затем перенос Utils → Services |
| 4 |
#362 |
Cart/Customer thin facade по образцу Order |
| 4b |
#363 |
DI: OptionSync/Loader, ManagerOrderCostRecalculator |
| 4c |
#366 |
Унификация cost checkout ↔ manager |
| 5 |
#364 |
ModelFieldsController → service |
| 5b |
#365 |
Split GridConfig / OptionLoader / ProductData |
| 6 |
#345 + #341 |
ServiceRegistry factory map; Response envelope |
| docs |
#367 |
Boundary naming Domain vs Api |
| parallel |
#350 #346 |
ExtJS→Vue; dual Settings API |
Правила для PR в этом треке
- Поведение и JSON-контракты mgr/web без breaking (или явный migration note).
- Не traits «разрезать файл на куски» без смены ownership.
- Новые сервисы — в
ServiceRegistry, не new в контроллере.
- Gate:
php -l / npm run lint по затронутому; ручной smoke в PR.
Альтернативные варианты
- Править точечно без трекера — долг растёт быстрее merges.
- Big-bang rewrite менеджера — out of scope.
Примеры использования
Maintainer открывает этот issue как dashboard: закрытие child-issue = фаза done.
Критерии приёмки
Дополнительный контекст
Связанные: #337 CI, #353 Orders getList, #356 Deliveries/Payments, #358 EventGate, #291 (импорт extra fields — после #344/#368).
Описание функции
Единый tracker по результатам архитектурного аудита (Jul 2026): вынести бизнес-логику из god-контроллеров/SFC, дожать domain facades, убрать ETL из Utils, выровнять DI.
Поведение магазина не менять без отдельного product-issue. Цель — cost of change и файлы < 1000 LOC.
Проблема, которую решает
Аудит зафиксировал системный долг, а не один файл:
OrdersController~1861 +OrderView~2517 (пара HTTP ↔ UI)ImportCSV999 вUtils/(потолок AGENTS.md)ServiceRegistryБез трекера issues расходятся, порядок разреза теряется.
Предлагаемое решение
Порядок фаз (code judo)
Правила для PR в этом треке
ServiceRegistry, неnewв контроллере.php -l/npm run lintпо затронутому; ручной smoke в PR.Альтернативные варианты
Примеры использования
Maintainer открывает этот issue как dashboard: закрытие child-issue = фаза done.
Критерии приёмки
Дополнительный контекст
Связанные: #337 CI, #353 Orders getList, #356 Deliveries/Payments, #358 EventGate, #291 (импорт extra fields — после #344/#368).