mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 17:29:58 +01:00
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/
This commit is contained in:
parent
ec9114aa0a
commit
c2c48a03e8
141 changed files with 734 additions and 9 deletions
|
|
@ -1,180 +0,0 @@
|
|||
# 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`
|
||||
Loading…
Add table
Add a link
Reference in a new issue