1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 19:00:23 +01:00
effigenix/backend/docs/mvp/ddd/README.md
Sebastian Frick c2c48a03e8 refactor: restructure repository with separate backend and frontend directories
- 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/
2026-02-17 22:08:51 +01:00

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`