Skip to content

Architecture

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

Архитектура

Пространство имён

Пакет использует PSR-4 namespace CloudCastle\Dictionary\ (каталог src/) с подслоями:

  • CloudCastle\Dictionary\Contract\ — интерфейсы (публичные контракты);
  • CloudCastle\Dictionary\Exception\ — исключения пакета;
  • CloudCastle\Dictionary\… — реализация.

Архитектурные границы между слоями проверяются Deptrac: Core зависит от Contract/Exception/External, Contract не зависит от Core.

Тесты

CloudCastle\Dictionary\Tests\ (каталог tests/) разделён на наборы: Unit, Integration, Security, Load, Performance.

Устройство

flowchart LR
    A[data/lang/class.php\nчистые return-массивы] -->|require, лениво| B[Dictionary::load\nкэш на процесс]
    B --> C[entries\nлемма → WordEntry]
    C -->|лениво при find по форме| D[formIndex\nформа → лемма]
    C -->|лениво при первом formOf| E[flatIndex\nслово → карта форм]
Loading
  • Dictionary — контейнер записей и три структуры доступа: hash-карта лемм, обратный индекс форм и плоский индекс formOf (оба ленивые, shared-ссылки — память не дублируется).
  • WordEntry — иммутабельная запись: лемма, Gender, одушевлённость, словоформы по строковым ключам.
  • Gender / WordClass — enum'ы рода/пола и разделов словаря.
  • Данные — PHP-файлы data/{lang}/{class}.php (opcache-friendly), формат описан в Конфигурации.

Принципы

  • Строгая типизация, declare(strict_types=1) в каждом файле.
  • Zero-dependency: только PHP 8.1+.
  • Иммутабельность: merge возвращает новый словарь, записи неизменяемы.
  • Словарная точность: данные фиксируют исключения, правила — задача inflector.
  • Публичный API документирован PHPDoc на русском.

Clone this wiki locally