Skip to content

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 .env baut. Die generierte Domain nimmt ihn im Konstruktor: new Ecommerce($kernel).
  • App (jardiscore/app) — die HTTP-Delivery: FastRoute hinter einem eigenen RouterInterface, eine PSR-15-Middleware-Pipeline und der eine kanonische DomainResponse → 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.

bash
composer require jardiscore/kernel

App

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.

bash
composer require jardiscore/app

Beziehung 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).