Business Core ist eine hochperformante, Framework-unabhängige PHP-Library zur Orchestrierung von Domain-Driven Design (DDD) Use Cases. Sie bietet eine deterministische Pipeline für Autorisierung, Guard-Prüfungen, Event-Dispatching und manipulationssicheres (append-only) Auditing.
Das Paket kommt mit Zero-Dependencies auf externe Framework-Fassaden (kein Laravel, kein Eloquent, kein Livewire) und eignet sich ideal als robuster, in sich geschlossener Core für komplexe Enterprise-Architekturen.
Das Paket kann direkt über Composer in Deine (Host-)Applikation installiert werden:
composer require allgorithm/business-coreDie Kernkomponente ist die OperationPipeline. Sie sorgt dafür, dass jede Operation zwingend autorisiert wird, Guards passiert, Fehler sicher fängt und lückenlos auditiert:
use BusinessCore\Application\Operations\OperationPipeline;
use BusinessCore\Application\Context\OperationContext;
use BusinessCore\Application\Context\ActorContext;
// 1. Pipeline mit konkreten Adaptern initialisieren
$pipeline = new OperationPipeline(
$authorizationAdapter,
$guardResolver,
$eventDispatcher,
$auditWriter
);
// 2. Kontext für den Akteur (z.B. HTTP User) erstellen
$context = new OperationContext(
actor: new ActorContext('user-uuid-123'),
tenantId: 'tenant-456'
);
// 3. Operation sicher ausführen
$result = $pipeline->run(
operation: new PublishProductOperation(),
command: new PublishProductCommand($productId),
context: $context
);
// Das Result ist immer deterministisch und fängt Throwable ab.
if ($result->isSuccess()) {
// Erfolgreich
}Der Core orchestriert Logik ausschließlich über saubere Interfaces (Contracts). Die wesentlichen Bestandteile:
OperationContract: Definiert eine Business-Aktion inklusive Permissions, Guards und Deskriptor.AuthorizationContract: Framework-unabhängige Prüfung der Berechtigung.OperationGuardContract: Abgekoppelte Vorbedingungen, die strukturiert alsCheckResultzurückmelden, ob eine Aktion erlaubt ist.AuditWriterContract: Strikt Append-Only Revisionsprotokoll für alle Ausgänge (AuditEntry).
Die Ausführung einer Operation über die OperationPipeline folgt deterministischen Regeln:
- Invalid Context: Fehlendes Zielobjekt (
target === null) führt vor jeder Prüfung sofort zuFAILED. - Missing Permission: Schlägt die Autorisierung fehl, gibt die Pipeline
UNAUTHORIZEDzurück (Guards & Handler werden nicht ausgeführt). - Guards failed: Sobald ein Guard ein erforderliches
FAILoder einERRORmeldet, wird die Ausführung mitBLOCKEDabgebrochen. - Exceptions: Jegliche
\Throwablein derhandle()-Logik wird gefangen und strukturiert in einFAILED-Resultat umgewandelt. Niemals crasht der Request unkontrolliert! - Audit First: Egal welcher Ausgang (Erfolg, Blockiert, Fehler), die
AuditStageschreibt immer lückenlos einen revisionssicherenAuditEntry.
Jedes Ergebnis wird einheitlich als OperationResult zurückgegeben, welches den definitiven Status trägt:
enum OperationStatus: string
{
case SUCCESS = 'success';
case BLOCKED = 'blocked';
case UNAUTHORIZED = 'unauthorized';
case FAILED = 'failed';
}Dieses Projekt ist unter der MIT Lizenz veröffentlicht. Pull Requests und Feedback sind herzlich willkommen!