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

5.9 KiB
Raw Blame History

Обзор архитектуры

Тип проекта

Структурированный монолит 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. Полную информацию смотрите в разделе Модульная система.

src/Modules/my-module/
├── module.json          # metadata
├── MyModuleModule.php   # extends BaseModule, namespace XcVm\Module\MyModule
└── ...

Контексты начальной загрузки

Четыре контекста определяют, какие подсистемы инициализируются. Смотрите Контексты начальной загрузки.

Контекст Используется для
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