- Rule 1: Alle Installer UI Modi (CLI, GUI, Silent) basieren auf der DFA (Deterministic Finite Automaton) State Machine
- Rule 2: Keine Ablaufsteuerung außerhalb der DFA Controller erzeugen - alle State-Transitions laufen über
InstallerController - Rule 3: UI Implementierungen sind reine "Views" - sie enthalten keine Geschäftslogik oder Flow-Control
- Rule 4: State-Validierung erfolgt ausschließlich im DFA Controller, nicht in den UI Views
- Model:
core.Installer,core.Config,core.Component- Business Logic und Daten - View:
ui.Silent,ui.CLI,ui.GUI- Nur Darstellung und User Input Collection - Controller:
controller.InstallerController- Flow Control und State Management - Rule 5: Views dürfen niemals direkt mit dem Model interagieren - nur über Controller
- Rule 6: Controller kennt keine UI-spezifischen Details - arbeitet über
InstallerViewInterface
- Rule 7: Alle UI Modi implementieren das
InstallerViewInterface - Rule 8: Interface Methoden sind zustandslos - sie erhalten alle nötigen Parameter
- Rule 9: UI-spezifische Methoden gehören nicht ins gemeinsame Interface
- Rule 10: Return Values sind konsistent:
(result, error)Pattern
- Rule 11: Jede UI Implementation muss beide Interfaces unterstützen:
InstallerView+core.UI - Rule 12: Adapter Pattern verwenden für Interface-Kompatibilität, keine Doppel-Implementation
- Rule 13:
core.UIMethoden delegieren anInstallerViewMethoden wo möglich
- Rule 14: States sind im
controllerPackage als Konstanten definiert - Rule 15: State-Reihenfolge:
Welcome → License → Components → InstallPath → Summary → Progress → Complete - Rule 16: Conditional States: License kann übersprungen werden wenn
config.License == "" - Rule 17: State-Transitions nur über DFA Actions:
Next,Back,Cancel
- Rule 18: Jeder State hat eine Validation Function im Controller
- Rule 19: Validation Failures verhindern State Transitions
- Rule 20: UI Views sammeln nur Daten - Validierung erfolgt im Controller
- Rule 21:
core.Configist Single Source of Truth für Installation Parameter - Rule 22: UI Views lesen Config, schreiben nie direkt - Updates über Controller
- Rule 23: YAML Config überschreibt Default Values, CLI Args überschreiben YAML
- Rule 24: Sensitive Data (Paths, Passwords) werden validiert bevor sie verwendet werden
- Rule 25: Component State wird im Installer Model verwaltet, nicht in Views
- Rule 26: Required Components können nicht deselektiert werden
- Rule 27: Component Dependencies werden im Model aufgelöst
- Rule 28: Silent UI führt keine interaktive Dialoge - alle Parameter müssen vorkonfiguriert sein
- Rule 29: Bei fehlenden Required Parameters: Error, nicht Prompt
- Rule 30: Logging ist einziger Output - kein Console Output
- Rule 31: CLI wartet auf User Input nur bei interaktiven Methoden
- Rule 32: CLI zeigt Progress als Text-basierte Updates
- Rule 33: CLI Input Validation erfolgt vor DFA Controller Aufruf
- Rule 34: EOF/Interrupt führt zu sauberem Exit, nicht zu Crash
- Rule 35: GUI State wird über HTTP API synchronisiert
- Rule 36: HTTP Handlers delegieren an DFA Controller, implementieren nicht selbst Logic
- Rule 37: GUI zeigt immer den aktuellen DFA State - keine independent Navigation
- Rule 38: Browser-Events (Next/Back/Cancel) werden zu DFA Actions gemappt
- Rule 39: Tests verwenden
testify/suitefür strukturierte Test Organization - Rule 40: Mock UIs für Controller Testing - nie echte UI in Unit Tests
- Rule 41: Integration Tests testen UI + Controller, Unit Tests testen einzelne Components
- Rule 42: DFA Controller Tests verwenden Mock InstallerView, nicht Mock core.UI
- Rule 43: Jeder DFA State braucht positive und negative Test Cases
- Rule 44: Alle UI Modi brauchen Initialization/Shutdown Tests
- Rule 45: Error Handling Paths müssen getestet werden
- Rule 46: Cross-UI Consistency Tests für unified Flow Verification
- Rule 47:
uiPackage darfcontrollerundcoreimportieren - Rule 48:
controllerPackage importiert nurcoreundwizard - Rule 49:
corePackage hat keine Dependencies aufuiodercontroller - Rule 50: Circular Dependencies sind verboten
- Rule 51: Shared Interfaces gehören ins
corePackage - Rule 52: UI-spezifische Interfaces gehören ins
uiPackage - Rule 53: Controller Interfaces gehören ins
controllerPackage
- ❌ Hardcoded State Sequences in UI Implementation
- ❌ Direct Model Manipulation von UI Views
- ❌ Bypass DFA Controller für State Changes
- ❌ UI-specific Business Logic in View Layer
- ❌ Silent Error Swallowing ohne Logging
- ❌ Inconsistent Error Types zwischen UI Modi
- ❌ Error Display in Wrong Layer (Model showing UI Errors)
- ❌ Real UI in Unit Tests (verwende Mocks)
- ❌ Hardcoded Test Data (verwende Test Fixtures)
- ❌ Test Dependencies on External Resources (Files, Network)
- ✅ Folgt DFA-First Prinzip?
- ✅ Keine Flow-Control in UI Views?
- ✅ Interfaces korrekt implementiert?
- ✅ Error Handling konsistent?
- ✅ Tests für neue Features vorhanden?
- ✅ Keine Circular Dependencies?
- ✅ Documentation aktualisiert?
- Before: Verstehe aktuelle State Flow und Dependencies
- During: Ein Interface/Layer nach dem anderen refactoren
- After: Tests laufen und Behavior ist identisch
- Never: Breaking Changes ohne Migration Path
- Go Compiler verhindert Interface Violations
go vetprüft auf häufige Errors- Import Cycle Detection durch Go Toolchain
- DFA Controller validates State Transitions
- Interface Implementation wird zur Runtime geprüft
- Config Validation beim Startup
- Jede Änderung an Core Interfaces braucht Review
- DFA State Changes brauchen explizite Tests
- Performance Impacts müssen dokumentiert werden
Diese Design Rules sind bindend für alle SetupKit Entwicklung. Exceptions nur nach Team Discussion und Dokumentation der Gründe.