2.7 KiB
2.7 KiB
Projektstruktur Elterndienstplaner
Dateien
csv_io.py - CSV Input/Output Module
Zweck: Trennung von Datei-I/O und Business-Logik
Klassen:
-
EingabeParser: Parst alle CSV-Eingabedateienparse_eingabe_csv(): Lädt eingabe.csv mit Terminen und Präferenzenparse_eltern_csv(): Lädt eltern.csv mit Dienstfaktorenparse_vorherige_ausgaben_csv(): Lädt vorherige-ausgaben.csv für Fairness
-
AusgabeWriter: Schreibt Ergebnisse in CSVschreibe_ausgabe_csv(): Schreibt Lösung in ausgabe.csv
Vorteile:
- ✅ Testbar: CSV-Parsing kann isoliert getestet werden
- ✅ Wiederverwendbar: Andere Formate (JSON, Excel) leicht hinzufügbar
- ✅ Klare Verantwortlichkeiten: I/O getrennt von Optimierung
elterndienstplaner.py - Hauptprogramm
Zweck: Business-Logik und Optimierung
Klassen:
Dienst: Datenmodell für DiensttypenElterndienstplaner: Hauptklasse mit Optimierungslogik- Fairness-Berechnungen (global/lokal)
- Optimierungsmodell-Erstellung
- Statistiken
Abhängigkeiten:
- Importiert
csv_iofür Datei-Operationen - Verwendet
pulpfür lineare Optimierung
Verbesserungen durch Refactoring
Vorher (Monolith)
elterndienstplaner.py (700+ Zeilen)
├── Dienst Klasse
├── CSV Parsing (150+ Zeilen)
├── Fairness-Berechnung
├── Optimierung
└── CSV Schreiben
Nachher (Modular)
csv_io.py (220 Zeilen)
├── EingabeParser
└── AusgabeWriter
elterndienstplaner.py (500 Zeilen)
├── Dienst Klasse
├── Fairness-Berechnung
├── Optimierung
└── Statistiken
Nächste Schritte (Optional)
Phase 2: Constraint-Funktionen auslagern
def _add_constraint_ein_dienst_pro_woche(prob, x, ...):
"""C1: Je Eltern und Dienst nur einmal die Woche"""
def _add_constraint_ein_dienst_pro_tag(prob, x, ...):
"""C2: Je Eltern nur einen Dienst am Tag"""
Phase 3: Fairness-Modul (optional)
fairness.py
├── FairnessBerechner
│ ├── berechne_global()
│ └── berechne_lokal()
Verwendung
from csv_io import EingabeParser, AusgabeWriter
# Daten laden
eltern, tage, dienste, ... = EingabeParser.parse_eingabe_csv("eingabe.csv", lookup_fn)
# Ergebnis schreiben
AusgabeWriter.schreibe_ausgabe_csv("ausgabe.csv", lösung, tage, dienste)
Vorteile der aktuellen Struktur
- Separation of Concerns: I/O getrennt von Business-Logik
- Testbarkeit: Module können unabhängig getestet werden
- Wartbarkeit: Änderungen an CSV-Format betreffen nur
csv_io.py - Erweiterbarkeit: Neue Dateiformate können leicht hinzugefügt werden
- Lesbarkeit: Kürzere, fokussiertere Dateien