Shared-пакеты и абстракции
Граница между DevCraft Admin и внешними shared-пакетами, включая devcraftclub/dev-tools.
DevCraft Admin больше не рассматривается как единственный источник базовых DTO и fluent/runtime-абстракций. Общие примитивы постепенно выносятся в отдельные Composer-пакеты, а сама админ-оболочка остаётся потребителем этих пакетов.
Что живёт в DevCraft Admin
В самом DevCraft Admin остаются DLE- и UI-специфичные части:
manifest.php,Registry,DleMenuBuilder,AdminLinkResolver- страницы, AJAX-обработчики, Twig-шаблоны, Metro UI
- Composer UI и sync-сервисы (
ComposerRuntimeAdapter,ComposerDbSyncService,ManifestPackageReader)
Что вынесено в devcraftclub/dev-tools
Пакет devcraftclub/dev-tools содержит переиспользуемые строительные блоки, не привязанные к DLE-админке:
AbstractReflectionдля hydratable DTO с public typed propertiesAbstractWithдля fluent-объектов с#[With]/#[WithItem]- runtime-компоненты вроде
WithHandler - атрибуты валидации и маппинга
Compatibility-layer в текущем коде
В переходный период DevCraft\Core\Abstracts\AbstractType остаётся локальной точкой совместимости поверх AbstractReflection.
Это означает:
- существующие типы
DevCraft\Types\*можно переводить поэтапно - простые DTO сначала избавляются от ручного
toArray() - более сложные агрегаты вроде
ModuleManifestи составных схем продолжают жить в Admin, пока их сериализация и карта полей не будут стабилизированы
Текущий практический этап уже перевёл AbstractType на этот compatibility-layer и начал снимать ручную сериализацию с безопасных DTO и схем, не меняя их внешний контракт создания через fromArray().
Как объявлять зависимость
Если модуль или core-слой действительно опирается на классы dev-tools, зависимость должна быть видна в двух местах:
- в корневом
devcraft/composer.json - в
composer_requiredсоответствующегоmanifest.php, если пакет должен отображаться в Composer UI как обязательный или рекомендуемый
'composer_required' => [
['name' => 'devcraftclub/dev-tools', 'minVersion' => '^1.0', 'hardRequired' => true],
]Практическое правило
Если класс описывает:
- DLE-роутинг, админ-страницы, Twig/Metro, AJAX-контракт, работу с registry или manifest-семантикой, он остаётся в
DevCraft Admin - универсальный DTO, reflection-based hydration или fluent mutation без DLE-зависимостей, сначала смотрите на
Dev Tools