* opt.: docs l10n Fixes #1035 * opt. * rm: redundant docs * rm: features chapter * opt.: docs l10n Fixes #1035 * fix
3.1 KiB
3.1 KiB
title, description
| title | description |
|---|---|
| Architektur | Architekturmuster und Designentscheidungen |
Server Box folgt den Prinzipien der Clean Architecture mit einer klaren Trennung zwischen Daten-, Domänen- und Präsentationsschicht.
Schichtarchitektur
┌─────────────────────────────────────┐
│ Präsentationsschicht │
│ (lib/view/page/) │
│ - Seiten, Widgets, Controller │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Business-Logik-Schicht │
│ (lib/data/provider/) │
│ - Riverpod Provider │
│ - Zustandsverwaltung │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Datenschicht │
│ (lib/data/model/, store/) │
│ - Modelle, Speicher, Dienste │
└─────────────────────────────────────┘
Schlüsselmuster
Zustandsverwaltung: Riverpod
- Codegenerierung: Verwendet
riverpod_generatorfür typsichere Provider - State Notifier: Für veränderlichen Zustand mit Business-Logik
- Async Notifier: Für Lade- und Fehlerzustände
- Stream Provider: Für Echtzeitdaten
Unveränderliche Modelle: Freezed
- Alle Datenmodelle verwenden Freezed für Unveränderlichkeit
- Union-Typen zur Darstellung von Zuständen
- Integrierte JSON-Serialisierung
- CopyWith-Erweiterungen für Aktualisierungen
Lokale Speicherung: Hive
- hive_ce: Community-Edition von Hive
- Keine manuellen
@HiveFieldoder@HiveTypeerforderlich - Typ-Adapter werden automatisch generiert
- Persistenter Key-Value-Speicher
Dependency Injection
Dienste und Stores werden injiziert über:
- Provider: Stellen Abhängigkeiten der UI zur Verfügung
- GetIt: Service-Locator (wo anwendbar)
- Konstruktor-Injektion: Explizite Abhängigkeiten
Datenfluss
Benutzeraktion → Widget → Provider → Dienst/Store → Modell-Update → UI-Neuaufbau
- Benutzer interagiert mit Widget
- Widget ruft Provider-Methode auf
- Provider aktualisiert Zustand über Dienst/Store
- Zustandsänderung löst Neuaufbau der UI aus
- Neuer Zustand spiegelt sich im Widget wider
Eigene Abhängigkeiten
Das Projekt verwendet mehrere eigene Forks zur Funktionserweiterung:
- dartssh2: Erweiterte SSH-Funktionen
- xterm: Terminal-Emulator mit mobiler Unterstützung
- fl_lib: Gemeinsame UI-Komponenten und Dienstprogramme
Threading
- Isolates: Rechenintensive Aufgaben außerhalb des Main-Threads
- computer-Paket: Dienstprogramme für Multi-Threading
- Async/Await: Nicht-blockierende I/O-Operationen