Files
XC_VM/docs/ru/development/architecture.md
T
Divarion-D e382227a1d docs: remove root ARCHITECTURE.md files; promote architecture docs into docs/
ARCHITECTURE.md and ARCHITECTURE_RU.md (620 lines each) were a parallel
documentation source that drifted from the code and contained outdated
references (CONTEXT_* string constants, global $db, MIGRATION.md which
does not exist).

All relevant content is now covered by specialized pages in docs/:
- Module system → development/modules.md
- Bootstrap contexts → development/bootstrap-contexts.md
- Event system → development/event-system.md
- Build variants → builds/build_system.md

docs/{en,ru}/development/architecture.md rewritten as a clean, self-contained
overview: source tree table, runtime flow diagram, extension points table,
contributor rules. Broken links to ARCHITECTURE.md and MIGRATION.md removed.
2026-06-15 19:00:19 +03:00

102 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Обзор архитектуры
## Тип проекта
Структурированный PHP-монолит с модульным слоем расширений.
- Без DDD, Hexagonal или Clean Architecture — намеренное решение.
- Разделение по контекстам с минимумом абстракций: `Controller → Service → Repository`.
- Два артефакта сборки из одной кодовой базы: **MAIN** (полная панель) и **LB** (load balancer).
---
## Структура src
| Путь | Роль |
| ---- | ---- |
| `src/core/` | Инфраструктурные примитивы: DI-контейнер, события, HTTP, конфиг, auth, логирование |
| `src/domain/` | Бизнес-контексты: Stream, VOD, Line, User, Server, Security и др. |
| `src/modules/` | Опциональный слой расширений — загружается `ModuleLoader` |
| `src/public/` | Front controller, router, controllers, views, assets |
| `src/cli/` | Консольные команды и точки входа для cron |
| `src/ministra/` | Stalker Portal — изолированная подсистема (`BoundaryInterface`) |
---
## Модель рантайма
Зависимости направлены внутрь — модули могут использовать core и domain, но не наоборот.
```
public/index.php
└── XC_Bootstrap::boot(BootContext::ADMIN)
└── ServiceContainer (DI)
├── EventDispatcher (PSR-14)
├── ModuleLoader → loadAll() → bootAll()
└── Router → dispatch()
```
Domain-классы получают базу данных через инъекцию `setDb()` (вызывается из
`bootstrap.php::wireDomainDatabase()`). `global $db` в web-пути запроса отсутствует.
---
## Система модулей
Модули — изолированные директории в `src/modules/` с манифестом `module.json`
и классом, расширяющим `BaseModule`. Полный справочник: [Система модулей](modules.md).
```
src/modules/my-module/
├── module.json # метаданные
├── MyModuleModule.php # extends BaseModule, namespace XcVm\Module\MyModule
└── ...
```
---
## Контексты Bootstrap
Четыре контекста определяют набор инициализируемых подсистем. Подробнее: [Контексты Bootstrap](bootstrap-contexts.md).
| Контекст | Применение |
| -------- | ---------- |
| `BootContext::MINIMAL` | Скрипты, которым нужны только пути/конфиг |
| `BootContext::CLI` | Cron-задачи и CLI-команды |
| `BootContext::STREAM` | Стриминговые эндпоинты |
| `BootContext::ADMIN` | Панель администратора / реселлера |
---
## Варианты сборки (MAIN vs LB)
| | MAIN | LB |
| --- | ---- | -- |
| Панель администратора | ✅ | ❌ |
| Стриминг | ✅ | ✅ |
| Система модулей | ✅ | подмножество |
Управляется enum `ServerEnvironment` и полем `environment` в `module.json` (`main` / `lb` / `any`).
---
## Ключевые точки расширения
| Механизм | Как использовать |
| --------- | ---------------- |
| PSR-14 события | `EventDispatcher::listen()` или атрибут `#[ListensTo]` |
| Декорирование сервисов | `$container->decorate('id', callable, priority)` |
| Stream middleware | Реализовать `StreamMiddlewareProviderInterface` |
| Cron-записи | Переопределить `getCronEntries()` в классе модуля |
| DB-миграции | Реализовать `MigratableInterface::getMigrations()` |
---
## Правила для контрибьюторов
1. Модули не должны изменять файлы ядра.
2. Запрещены `eval`, monkey patching и подмена файлов во время выполнения.
3. Любой модуль можно отключить через `config/modules.php` без изменений ядра.
4. Защищённые сервисы (`db`, `settings`, `config`, `auth`) нельзя декорировать.
5. EN и RU документация обновляются в одном коммите.