mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 19:00:23 +01:00
- 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/
180 lines
5.6 KiB
Markdown
180 lines
5.6 KiB
Markdown
# 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`):
|
|
|
|
```java
|
|
// 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:**
|
|
```java
|
|
// 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!**
|
|
|
|
```mermaid
|
|
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:**
|
|
1. Finde alle Produktionschargen mit betroffener Lieferanten-Charge
|
|
2. Finde alle Verkäufe dieser Produktionschargen
|
|
3. 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:**
|
|
1. Relevanten Bounded Context öffnen (z.B. `04-produktions-kontext.md`)
|
|
2. Aggregate-Struktur durchgehen
|
|
3. 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
|
|
|
|
1. ✅ **Phase 0-3 abgeschlossen** - Bounded Contexts & Aggregates modelliert
|
|
2. ⏳ **Phase 4: Invarianten** - Detaillierte Geschäftsregeln pro Aggregat
|
|
3. ⏳ **Phase 5: Code-Generierung** - Java 21+ Code aus Modellen
|
|
4. ⏳ **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`
|