- Move Java backend to backend/ directory - Create frontend/ directory for TypeScript TUI and future WebUI - Update .gitignore for Node.js and worktrees - Update README.md with new repository structure - Copy documentation to backend/
5.6 KiB
DDD Domain Model - Effigenix Fleischerei-ERP
Sprache: Deutsch (für Domain-Experten) Code: Englisch (siehe Java Style Guide) Erstellt: 2026-02-17 Technologie: Java 21+ mit DDD + Clean Architecture
📚 Dokumentationsstruktur
Übersichtsdokumente
| Dokument | Beschreibung |
|---|---|
00-overview.md |
Gesamtüberblick, DDD-Phasen, Projektziele |
01-domain-classification.md |
Core/Supporting/Generic Klassifizierung mit Begründungen |
02-bounded-contexts.md |
Context Map (Mermaid) + Kontextbeziehungen |
03-ubiquitous-language.md |
Glossar DE/EN für alle Bounded Contexts |
Kern-Domäne (Core) - 7 Kontexte
| Dokument | Bounded Context | Aggregates |
|---|---|---|
04-produktions-kontext.md |
Produktion | Rezept, Charge, Produktionsauftrag |
05-qualitaets-kontext.md |
Qualität (HACCP/QM) | Temperaturprotokoll, Reinigungsnachweis, Wareneingangsprüfung, Schulungsnachweis, Wartungsprotokoll |
06-labeling-bc.md |
Deklaration | Produktetikett, Allergene-Matrix |
07-bestandsfuehrungs-kontext.md |
Bestandsführung | Bestand, Bestandsbewegung |
08-procurement-bc.md |
Beschaffung | Bestellung, Wareneingang, Bedarfsplan |
09-filiales-bc.md |
Filialen | Filiale, Interfilial-Transfer, Verteilungsplan |
Unterstützende Domäne (Supporting) - 3 Kontexte
| Dokument | Bounded Context | Aggregates |
|---|---|---|
10-supporting-bcs.md |
Stammdaten | Artikel, Lieferant, Kunde |
10-supporting-bcs.md |
Verkauf | Auftrag, Rechnung, Lieferschein |
10-supporting-bcs.md |
Waagen-Integration | Synchronisations-Job, Bondaten-Import |
🎯 Verwendung für Domain-Experten
Für Besprechungen mit Fleischerei-Experten
Diese Dokumente verwenden deutsche Begriffe, um die Kommunikation zu erleichtern:
- ✅ Rezept statt Recipe
- ✅ Charge statt Batch
- ✅ Wareneingang statt Goods Receipt
- ✅ Rückverfolgbarkeit statt Traceability
Im Code werden englische Begriffe verwendet (siehe 03-ubiquitous-language.md):
// Dokumentation: Rezept
// Code: Recipe
public class Recipe { ... }
// Dokumentation: Charge
// Code: Batch
public class Batch { ... }
🔍 Wichtige Konzepte
1. Aggregate
Ein Aggregat ist eine Gruppe von Objekten, die immer konsistent zusammen geändert werden müssen.
Beispiel: Rezept-Aggregat
Rezept (Aggregate Root)
├── RezeptId
├── Name
├── Zutaten[] (Teil des Aggregats)
├── Produktionsschritte[] (Teil des Aggregats)
└── Status
- Aggregate Root = Einstiegspunkt (nur Rezept ist von außen zugänglich)
- Invarianten = Regeln, die IMMER gelten müssen (z.B. "Rezept muss mind. 1 Zutat haben")
- Transaktionsgrenze = Ein Rezept = eine Datenbanktransaktion
2. Wertobjekte (Value Objects)
Unveränderliche Objekte, die nur durch ihre Werte definiert sind.
Beispiel:
// Zwei Geldbeträge mit gleichen Werten sind identisch
Money betrag1 = Money.of(100, "EUR");
Money betrag2 = Money.of(100, "EUR");
// betrag1.equals(betrag2) = true
// Im Gegensatz zu Entities (haben ID)
Charge charge1 = Charge.of(ChargenId.of("CHARGE-001"), ...);
Charge charge2 = Charge.of(ChargenId.of("CHARGE-002"), ...);
// charge1.equals(charge2) = false (verschiedene IDs)
3. Rückverfolgbarkeit (Traceability)
KRITISCH für Fleischerei-Betriebe!
graph LR
A[Lieferanten-Charge<br/>SUPPLIER-12345] -->|verwendet in| B[Produktions-Charge<br/>BATCH-2026-02-17-001]
B -->|verkauft als| C[Rechnung<br/>INV-2026-02-20-042]
C -->|an| D[Kunde<br/>CUST-123]
style A fill:#ffe6e6
style B fill:#e6f3ff
style C fill:#e6ffe6
style D fill:#fff9e6
Bei Rückruf:
- Finde alle Produktionschargen mit betroffener Lieferanten-Charge
- Finde alle Verkäufe dieser Produktionschargen
- Informiere betroffene Kunden
Code: Siehe 07-bestandsfuehrungs-kontext.md - Rückverfolgbarkeits-Beispiel
📊 Context Map
Die Context Map zeigt, wie die verschiedenen Bounded Contexts zusammenarbeiten:
Siehe: 02-bounded-contexts.md
Kernaussagen:
- Produktion liefert Rezeptdaten an Deklaration (für Nährwertberechnung)
- Produktion verbraucht/produziert in Bestandsführung
- Qualität prüft Wareneingang (aus Beschaffung)
- Bestandsführung ist zentral - alle schreiben/lesen dort
✅ Validierung mit Domain-Experten
Checkliste für Review-Meetings
Vorbereitung:
- Relevanten Bounded Context öffnen (z.B.
04-produktions-kontext.md) - Aggregate-Struktur durchgehen
- Invarianten besprechen
Fragen an Experten:
- ✅ Sind alle Zutaten erfasst, die in einem Rezept sein können?
- ✅ Gibt es weitere Produktionsschritte, die dokumentiert werden müssen?
- ✅ Welche Grenzwerte gelten für Temperaturprotokolle?
- ✅ Welche Dokumente sind bei Wareneingang Pflicht?
- ✅ Wie läuft ein Interfilial-Transfer praktisch ab?
Ergebnis:
- Dokumentation anpassen basierend auf Feedback
- Neue Invarianten hinzufügen
- Fehlende Aggregate/Entities ergänzen
🚀 Nächste Schritte
- ✅ Phase 0-3 abgeschlossen - Bounded Contexts & Aggregates modelliert
- ⏳ Phase 4: Invarianten - Detaillierte Geschäftsregeln pro Aggregat
- ⏳ Phase 5: Code-Generierung - Java 21+ Code aus Modellen
- ⏳ Phase 6: Validierung - DDD-Rules-Checklist
📞 Kontakt
Für Rückfragen zum Domain Model:
- Dokumentation:
docs/mvp/ddd/ - Code-Beispiele:
.claude/skills/ddd-model/languages/java/templates/ - DDD-Regeln:
.claude/skills/ddd-model/rules/ddd-rules.md