DevCraft Документации
СправочникBack-End

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 properties
  • AbstractWith для 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, зависимость должна быть видна в двух местах:

  1. в корневом devcraft/composer.json
  2. в 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

См. также

На этой странице