Zum Inhalt springen

DDD-Architektur für Logistik-Systeme in PHP

Sendungsverfolgung, Frachtmanagement und Warehouse-Steuerung brauchen Event-Driven Domains, keine monolithischen Tabellen. Jardis gibt deinem Logistik-System die Architektur, die jeden Zustandswechsel einer Sendung als Domain Event abbildet.

Je mehr Carrier ihr anbindet, desto fragiler wird das System.

Logistik-Software startet als einfaches Tracking. Dann kommen neue Carrier, Lagerverwaltung, EDI-Schnittstellen. Ohne Domain-Grenzen wird jede Anbindung zum Risiko.

Tracking-Daten stecken in Silos

TMS, WMS und Carrier-APIs liefern Statusupdates in unterschiedlichen Formaten. Ohne zentrale Domain-Events sind Sendungsstatus inkonsistent. Kunden sehen veraltete Daten, Disponenten treffen Entscheidungen auf falscher Basis. Last-Mile-Tracking und Cross-Docking-Status laufen über getrennte Systeme, die sich gegenseitig nicht kennen.

Zustandswechsel gehen verloren

Abholung, Umschlag, Zollfreigabe, Zustellung: jeder Schritt ändert den Status einer Sendung. Ohne Event-Driven Architektur werden Übergänge per direktem Datenbankupdate abgebildet. Lücken im Tracking sind vorprogrammiert. Bei Multi-Modal-Transporten mit Wechsel zwischen LKW, Bahn und Schiff fehlen ganze Abschnitte in der Sendungshistorie.

Jede Carrier-Anbindung ist ein Sonderprojekt

Neue Spediteure, EDI-Protokolle oder API-Versionen erfordern Wochen Integrationsarbeit. Business-Logik ist mit Adapter-Code verwoben. Ein Carrier-Wechsel zieht Änderungen durch die halbe Codebasis. Ob EDIFACT für internationale Fracht oder REST-APIs für Last-Mile-Dienste: jede Integration wird von Grund auf gebaut.

Tracking-Events statt Datenbank-Polling.

Der Jardis Builder generiert Event-Driven Domains für jeden Bereich deiner Supply Chain. Tracking, Routing und Warehouse als eigenständige Bounded Contexts mit physischer Trennung.

EVENT-DRIVEN TRACKING

Jeder Sendungsstatus wird ein Domain Event

ShipmentCreated, PickedUp, InTransit, CustomsCleared, Delivered: der Builder generiert Events und Handler für jeden Zustandswechsel. Kein direkter Datenbankupdate, kein verlorener Status. Jede Statusänderung ist nachvollziehbar und auditierbar. Bei Multi-Modal-Transporten dokumentiert jeder Carrier-Wechsel ein eigenes Event, sodass die komplette Transportkette lückenlos abgebildet wird.

CARRIER ISOLATION

Spediteure als austauschbare Adapter

Die Ports & Adapters-Architektur trennt Carrier-Integrationen von der Domain-Logik. DHL, FedEx, lokale Spediteure: jeder bekommt einen eigenen Adapter. Ein Carrier-Wechsel betrifft nur den Adapter, nicht die Geschäftslogik. EDIFACT für internationale Fracht, REST für Last-Mile-Dienste und SOAP für Legacy-Carrier koexistieren im selben System ohne gegenseitige Abhängigkeit.

DOMAIN BOUNDARIES

Tracking, Routing und Warehouse als eigene Packages

Jeder Bounded Context wird ein eigenständiges PHP-Package. Das Warehouse-System kann nicht auf Routing-Tabellen zugreifen. Der Builder erzwingt diese Trennung auf Dateisystem-Ebene. TMS- und WMS-Logik bleiben sauber getrennt, auch wenn sie zusammenarbeiten. Zollabwicklung, Lagerverwaltung und Tourenplanung als unabhängige Contexts, verbunden über Domain Events.

Sieh selbst, was aus drei Dateien entsteht.

Drei Definitionsdateien rein, ein kompletter Bounded Context raus. Klick dich durch den generierten Code.

E-Commerce / Sales
schema.yaml
# Database Schema — Sales Bounded Context
# This file defines the persistent storage structure.

schema:
  domain: ECommerce
  boundedContext: Sales

tables:
  order:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      public_id:
        type: uuid7
        unique: true
      customer_email:
        type: string
        length: 255
      status:
        type: string
        length: 32
        default: "draft"
      total_amount:
        type: integer
      currency:
        type: string
        length: 3
        default: "EUR"
      created_at:
        type: datetime
      updated_at:
        type: datetime
        nullable: true

  order_item:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      order_id:
        type: integer
        foreignKey:
          table: order
          column: id
          onDelete: cascade
      product_name:
        type: string
        length: 255
      sku:
        type: string
        length: 64
      quantity:
        type: integer
      unit_price:
        type: integer
      line_total:
        type: integer
Dateien
Definitions (Input)
Generated Code (Output)
BUILDER OUTPUT
80%
Infrastruktur-Code generiertEntities, Commands, Queries, Events, API Contracts und die Repository Pipeline für jede Logistik-Domain.
0
verlorene Zustandswechsel
3x
schnellere Carrier-Integration
SUPPLY CHAIN
100%
Event-Driven TrackingJeder Statuswechsel einer Sendung ist ein Domain Event. Lückenlose Nachverfolgung ohne manuelle Synchronisation.

Was Logistik-Teams mit Jardis gewinnen.

Vom lokalen Versand bis zur internationalen Supply Chain. Jardis wächst mit eurer Infrastruktur.

> Event-Driven

Supply Chain als Ereignisstrom

Jeder Schritt in der Lieferkette publiziert ein Domain Event. Nachgelagerte Systeme reagieren automatisch: Lagerbestand aktualisieren, Kunden benachrichtigen, Disponenten informieren.

> Adapter-Architektur

Carrier wechseln ohne Codeumbau

Hexagonale Architektur trennt Carrier-APIs von der Routing-Logik. Neuer Spediteur? Adapter schreiben, anschließen. Die Domain-Logik bleibt unverändert, egal ob EDI, REST oder SOAP.

> Domain Ownership

Teams besitzen Domains, nicht Features

Ein Team verantwortet Tracking. Ein anderes das Warehouse-Management. Deployments sind unabhängig, weil physische Package-Grenzen die Zuständigkeit definieren.

Wie lange sollen eure Sendungsstatus noch per Datenbankupdate wandern?

Auf die Waitlist

Struktur kostet weniger als Chaos.

Kostenloser Trial

Teste Jardis 7 Tage kostenlos

Lass Jardis an deiner echten Domäne los. Discovery, Struktur und dein erster Platform Build.

Join Waitlist
20 Discovery Runs
5 Structure Builds
1 Platform Build
Alle Jardis Packages als Open Source
Jardis Base
29 €pro Monat

Die komplette DDD-Architektur mit allen Klassen und Contracts. Dein Team schreibt Features, nicht Infrastruktur.

Join Waitlist
Unlimited Discovery Runs
Unlimited Structure Builds
Alle 26 Jardis Packages enthalten
PHPStan Level 8 von Anfang an
Jardis Pro
180 €pro Monat

Die komplette Business-Logik mit Handlern, Validierung und Pipelines. Was früher ein Sprint war, ist jetzt ein Build.

Join Waitlist
Alles aus Jardis Base
Commands, Queries, Events direkt implementiert
Platform Code in Sekunden statt Wochen
Weitere Runs für 89 € einzeln
Enterprise

Mehr als 20 Platform Builds pro Monat?

Lass uns sprechen

Sei dabei, wenn Jardis startet.

Trag dich ein. Du bekommst Zugang, sobald wir live gehen. Inklusive kostenlosem Trial.

100+ Entwickler warten bereits auf den Launch

Neugierig, wie Jardis funktioniert?

Jardis entdecken

Häufige Fragen

Antworten auf die wichtigsten Fragen zu Jardis im Logistik-Kontext.

Ja. Jardis ist für Brownfield-Szenarien gebaut. Du generierst einzelne Bounded Contexts und integrierst sie schrittweise in bestehende PHP-Systeme. Die Ports & Adapters-Architektur sorgt dafür, dass neue Domains neben existierendem TMS- oder WMS-Code laufen können. Ein typischer Einstieg: Tracking als eigener Context, der Statusdaten per Domain Events an das bestehende TMS liefert.