Реализация
Представленные диаграммы фиксируют ключевое архитектурное решение: полное отделение предметной логики от среды исполнения с автоматической генерацией связующего кода. Вместо ручного дублирования методов и свойств между Logic и Flow препроцессор (TacCompiler) анализирует атрибут [TacLogic] и строит проекцию публичного API Logic во Flow, делегируя вызовы внутреннему экземпляру. Это избавляет от шаблонного кода, сохраняет инкапсуляцию (Logic доступна только своему Flow и наследникам) и позволяет подменять реализацию Logic в дочерних классах без изменения структуры Flow.
Разбиение по сборкам (TacPrimitives, TacStandard, TacStandardU, TacSqlData и др.) явно маркирует границы ответственности: базовые абстракции, сервисы для работы без Unity, адаптеры под Unity, реализацию ORM и сервисный слой для работы с БД. Это гарантирует, что бизнес-правила никогда не «увидят» зависимости от Unity, Entity Framework или операционной системы — все средозависимые функции выносятся в адаптеры и подключаются через интерфейсы (например, ItemDb для сохранения графа объектов). Такая структура делает логику тестируемой, переносимой на консоль или сервер (в том числе как Windows-службу) и устойчивой к смене технологий.

Вторая диаграмма иллюстрирует жизненный цикл и динамику: препроцессор генерирует не только проекцию методов, но и код инициализации (InitData), создающий коллекции и автоматически связывающий внутренние делегаты Logic с методами Flow (поиск по сигнатуре). Это позволяет Logic «запрашивать» у Flow действия, невозможные внутри неё (например, проверку коллизий), при этом внешний код может подставлять свои обработчики через public делегаты. В совокупности с механизмом AllowSet, который точечно разрешает изменение состояния через специальные методы, архитектура обеспечивает строгий контроль доступа, сохраняя семантическую целостность и упрощая отладку.
