Core
Die Laufzeitplattform für generierte Jardis-Domains, vom Service-Koffer bis zur HTTP-Antwort.
Jardis Core ist die Basis, auf der der vom Builder erzeugte Domain-Code läuft. Es stellt zwei klar getrennte Bausteine bereit: Kernel verpackt alle Infrastruktur-Services in einen immutablen Koffer, den jede generierte Domain per Constructor Injection erhält. App setzt die HTTP-Delivery-Schicht um diesen Koffer: Router, Middleware-Pipeline und den kanonischen Envelope-Mapper.
Überblick
Zwei Packages, zwei Aufgaben:
- Kernel (
jardiscore/kernel) — der Koffer (DomainKernel): ein immutabler Container mit elf Service-Zugriffen, plus ein optionaler ENV-Packer, der ihn aus.envbaut. Die generierte Domain nimmt ihn im Konstruktor:new Ecommerce($kernel). - App (
jardiscore/app) — die HTTP-Delivery: FastRoute hinter einem eigenenRouterInterface, eine PSR-15-Middleware-Pipeline und der eine kanonischeDomainResponse→ PSR-7-Mapper ({status, data, errors, meta}).
GitHub: jardisCore
Kernel-Entkopplung (2026-07)
DomainApp, BoundedContext, ServiceRegistry und die Response-Trio-Klassen sind nicht mehr Teil von Kernel. Der Builder generiert sie jetzt pro Domain als {Domain}Context und {Domain}\Response\*. Kernel behält nur den Koffer und den ENV-Packer.
Packages
Kernel
Der immutable Koffer: DomainKernel mit elf konstruktor-injizierten Services (DB, Cache, Logger, Events, HTTP, Mailer, Filesystem, …) und ein optionaler BuildDomainKernelFromEnv-Packer, der ihn aus einer .env-Kaskade zusammenstellt. Baut nichts selbst, liest kein ENV: ein reiner, unveränderlicher Konsument.
composer require jardiscore/kernelApp
Die HTTP-Delivery-Schicht für generierte Domains: ein Routes-Collector, ein FastRoute-Router hinter eigenem Interface, eine PSR-15-Pipeline (global außen, Route innen) und der App-Orchestrator, der jede DomainResponse in den {status, data, errors, meta}-Envelope übersetzt. Boundary-Fehler (404/405/500) antworten im selben Envelope.
composer require jardiscore/appBeziehung der Packages
BuildDomainKernelFromEnv (Kernel, optional)
↓ baut
DomainKernel — der Koffer (Kernel)
↓ Constructor Injection
new Ecommerce($kernel) — generierte Domain (Builder-Output)
↓ liest read()/process()/exposed Rules
App — HTTP-Delivery (App)
↓ DomainResponse → PSR-7-Envelope
{status, data, errors, meta}Der Koffer ist die Naht zwischen Infrastruktur und Domain: Kernel füllt ihn, die generierte Domain konsumiert ihn, App liefert die Ergebnisse als HTTP aus. Keine generierte Domain importiert jemals jardiscore/app: die Delivery-Schicht ist austauschbar (ein Symfony-Front-Controller kann denselben Envelope erfüllen).