Files
XC_VM/docs/ru/development/architecture.md
T
Divarion_D dbf535bcc5 docs(translate): robust {N} sentinels + possessive handling; regenerate ru
Fix Markdown-mangling artifacts the free web engine (yandex) produced in the
committed docs/ru, and regenerate the whole tree cleanly (0 fallbacks):

- Sentinel format @@N@@ -> {N}. MT engines are trained to preserve curly
  format-string placeholders, so {N} survives code-heavy lines where @@N@@ (and
  ZZZ…ZZZ, which also duplicated its Z) were split/moved — e.g. the stray
  "@0@@" in the FAQ and "load balancerZ" in the README are gone.
- Possessive: a trailing English `'s` is consumed INTO the masked span and
  dropped on restore. Every sentinel format breaks when a bare `'s` sits right
  after it, and Russian has no possessive `'s`.
- Validate + retry: after restore, any leftover brace fragment triggers a retry
  (the engine is non-deterministic); after a few failures the line stays English
  so a broken token is never emitted.
- Glossary += KeyDB, yt-dlp, Ubuntu, iptables, MAGSCAN.

Regenerated docs/ru (37 files, translators/yandex): no residual sentinels,
mkdocs build --strict clean.
2026-08-21 16:31:01 +03:00

114 lines
5.9 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, никакой гексагональности, никакой чистой архитектуры — намеренно.
- Split by context with minimal abstractions: `Controller → Service → Repository`.
- Два артефакта сборки из одной кодовой базы: **MAIN** (полная панель) и **LB** (подмножество load balancer).
---
## Дерево исходных текстов
|Путь|Роль|
| ---- | ---- |
| `src/Core/` |Примитивы инфраструктуры: Контейнер DI, события, HTTP, настройка, аутентификация, ведение журнала|
| `src/Domain/` |Бизнес-контексты: Поток, VOD, линия, пользователь, сервер, безопасность и т.д.|
| `src/Modules/` |Дополнительный слой расширения — загружается с помощью `ModuleLoader`|
| `src/Public/` |Передний контроллер, маршрутизатор, контроллеры, представления, ресурсы|
| `src/Cli/` |Консольные команды и точки входа в cron|
| `src/Ministra/` | Stalker Portal — in core; served at `/home/xc_vm/Ministra` |
---
## Модель времени выполнения
Зависимости перетекают друг в друга — модули могут использовать ядро и домен, но никогда наоборот.
```
Public/index.php
└── XC_Bootstrap::boot(BootContext::ADMIN)
└── ServiceContainer (DI)
├── EventDispatcher (PSR-14)
├── ModuleLoader → loadAll() → bootAll()
└── Router → dispatch()
```
Классы домена получают базу данных посредством внедрения `setDb()` (вызывается из
`bootstrap.php::wireDomainDatabase()`). Нет `global $db` в пути веб-запроса.
---
## Модульная система
Модули представляют собой изолированные каталоги под `src/Modules/` с манифестом `module.json`
и класс, расширяющий `BaseModule`. Полную информацию смотрите в разделе [Модульная система](modules.md).
```
src/Modules/my-module/
├── module.json # metadata
├── MyModuleModule.php # extends BaseModule, namespace XcVm\Module\MyModule
└── ...
```
---
## Контексты начальной загрузки
Четыре контекста определяют, какие подсистемы инициализируются. Смотрите [Контексты начальной загрузки](bootstrap-contexts.md).
|Контекст|Используется для|
| ------- | -------- |
| `BootContext::MINIMAL` |Скрипты, которым нужны только пути / конфигурация|
| `BootContext::CLI` |Задания Cron и команды CLI|
| `BootContext::STREAM` |Конечные точки потоковой передачи|
| `BootContext::ADMIN` |Панель администратора/реселлера|
---
## Варианты сборки (ОСНОВНАЯ и LB)
| |главный|фунт|
| --- | ---- | -- |
|Панель администратора|✅|❌|
|Потоковый|✅|✅|
|Модульная система|✅|подмножество|
Управляется перечислением `ServerEnvironment` и полем `module.json` `environment` (`main` / `lb` / `any`).
---
## Ключевые моменты расширения
|Механизм|Как использовать|
| --------- | ---------- |
|События PSR-14|атрибут `EventDispatcher::listen()` или `#[ListensTo]`|
|Оформление сервиса| `$container->decorate('id', callable, priority)` |
|Потоковое промежуточное программное обеспечение|Реализовать `StreamMiddlewareProviderInterface`|
|Записи Cron|Переопределить `getCronEntries()` в классе модуля|
|Миграции баз данных|Реализовать `MigratableInterface::getMigrations()`|
---
## Правила для участников
1. Модули не должны изменять основные файлы.
2. Никаких `eval`, исправлений ошибок или замены файлов во время выполнения.
3. Любой модуль можно отключить с помощью `config/modules.php`, не прикасаясь к ядру.
4. Защищенные сервисы (`db`, `settings`, `config`, `auth`) не могут быть оформлены.
5. Синхронизируйте документы EN и RU в одном и том же коммите.
## Связанные файлы
|Файл|Роль|
| --- | --- |
| `src/Core/` |Примитивы фреймворка (DI, события, HTTP, config, auth, ведение журнала)|
| `src/Domain/` |Бизнес-контексты (Поток, VOD, строка, Пользователь, Сервер, безопасность)|
| `src/Infrastructure/` |Внешние адаптеры (DatabaseFactory, CacheReader, Redis)|
| `src/Streaming/` |Подсистема потоковой передачи|
| `src/Modules/` |Дополнительные модули (загружаются с помощью ModuleLoader)|
| `src/Public/` |Передний контроллер, контроллеры, виды|
| `src/Cli/` |Консольные команды и задания cron|