2026-01-09 15:19:25 +01:00
# Wrapper‑ Architektur – Übersicht
Die Wrapper‑ Architektur von sn_basis bildet das Fundament für eine robuste, testbare und zukunftssichere QGIS‑ Plugin‑ Entwicklung.
Sie kapselt sämtliche QGIS‑ und Qt‑ Abhängigkeiten hinter klar definierten Schnittstellen und ermöglicht dadurch:
2025-12-02 20:55:51 +01:00
2026-01-09 15:19:25 +01:00
Mock‑ fähige Unit‑ Tests ohne QGIS
PyQt5/6‑ Kompatibilität ohne Code‑ Änderungen
saubere Trennung von UI, Logik und Infrastruktur
stabile APIs, die unabhängig von QGIS‑ Versionen bleiben
klare Erweiterbarkeit für zukünftige Module und Plugins
Die Wrapper‑ Schicht ist das zentrale Bindeglied zwischen der Plugin‑ Logik und der QGIS‑ /Qt‑ Umgebung.
## Ziele der Wrapper‑ Architektur
🎯 1. Entkopplung von QGIS und Qt
Alle direkten Importe wie from qgis.core import ... oder from qgis.PyQt.QtWidgets import ... verschwinden aus der Plugin‑ Logik.
Stattdessen werden sie über Wrapper‑ Module abstrahiert.
🎯 2. Testbarkeit ohne QGIS
Im Mock‑ Modus liefern die Wrapper:
Dummy‑ Objekte
simulierte Rückgabewerte
speicherbare Zustände (z. B. Variablen, Layer, Nachrichten)
Damit laufen Tests in jeder CI‑ Umgebung.
🎯 3. Einheitliche API für alle Plugins
Plugins greifen nicht mehr direkt auf QGIS zu, sondern nutzen:
Code
sn_basis.functions.qgiscore_wrapper
sn_basis.functions.qgisui_wrapper
sn_basis.functions.qt_wrapper
sn_basis.functions.variable_wrapper
sn_basis.functions.message_wrapper
sn_basis.functions.dialog_wrapper
🎯 4. Zukunftssicherheit
Ändert sich die QGIS‑ oder Qt‑ API, wird nur der Wrapper angepasst, nicht jedes Plugin.
## Architekturüberblick
Die Wrapper‑ Schicht besteht aus mehreren Modulen, die jeweils einen klar abgegrenzten Verantwortungsbereich haben.
### 1. qt_wrapper – Qt‑ Abstraktion
Kapselt alle Qt‑ Widgets, Dialoge und Konstanten:
QWidget, QDialog, QMessageBox, QToolBar, QMenu, …
Layouts, Buttons, Labels, LineEdits
Qt‑ Konstanten wie YES, NO, Dock‑ Areas
Mock‑ Modus:
Stellt Dummy‑ Widgets bereit, die keine UI öffnen.
### 2. qgiscore_wrapper – QGIS‑ Core‑ Abstraktion
Abstraktion für:
QgsProject
Layer‑ Zugriff
Projekt‑ Metadaten
Pfade, CRS, Feature‑ Zugriff
Mock‑ Modus:
Simuliert ein Projekt und Layer‑ Container.
### 3. qgisui_wrapper – QGIS‑ UI‑ Abstraktion
Kapselt UI‑ bezogene QGIS‑ Funktionen:
Zugriff auf iface
Dock‑ Management
Menü‑ und Toolbar‑ Integration
Hauptfenster‑ Zugriff
Mock‑ Modus:
Stellt ein Dummy‑ Interface bereit.
### 4. variable_wrapper – QGIS‑ Variablen
Abstraktion für:
Projektvariablen (projectScope)
globale Variablen (globalScope)
Mock‑ Speicher für Tests
Vorteile:
keine QGIS‑ Abhängigkeit in der Logik
testbare Variablenverwaltung
einheitliches API
### 5. message_wrapper – Meldungen & Logging
Einheitliche Schnittstelle für:
Fehlermeldungen
Warnungen
Info‑ Meldungen
Logging
Mock‑ Modus:
Speichert Nachrichten statt sie an QGIS zu senden.
### 6. dialog_wrapper – Benutzer‑ Dialoge
Abstraktion für:
Ja/Nein‑ Dialoge
spätere Erweiterungen (Eingabedialoge, Dateidialoge, etc.)
Mock‑ Modus:
Gibt Default‑ Werte zurück, öffnet keine UI.
### 7. DockManager & Navigation
Diese Module nutzen die Wrapper‑ Schicht, um:
DockWidgets sicher zu verwalten
Toolbars und Menüs zu erzeugen
Reload‑ sichere UI‑ Strukturen aufzubauen
Sie sind keine Wrapper, sondern Wrapper‑ Konsumenten.
## Designprinzipien
🧱 1. Single Source of Truth
Jede QGIS‑ oder Qt‑ Funktionalität wird nur an einer Stelle implementiert.
🔄 2. Austauschbarkeit
Mock‑ Modus und Echtmodus sind vollständig austauschbar.
🧪 3. Testbarkeit
Jede Funktion kann ohne QGIS getestet werden.
🧼 4. Saubere Trennung
UI → qt_wrapper
QGIS‑ Core → qgiscore_wrapper
QGIS‑ UI → qgisui_wrapper
Logik → settings_logic, layer_logic, prüfmanager, …
🔌 5. Erweiterbarkeit
Neue Wrapper können jederzeit ergänzt werden, ohne bestehende Plugins zu brechen.
## Vorteile für Entwickler
Keine QGIS‑ Abhängigkeiten in der Logik
IDE‑ freundlich (Pylance, Autocomplete, Typing)
CI‑ fähig (Tests ohne QGIS)
saubere Architektur
leichte Wartbarkeit
klare Dokumentation
## Fazit
Die Wrapper‑ Architektur ist das Herzstück von sn_basis.
Sie ermöglicht eine moderne, modulare und testbare QGIS‑ Plugin‑ Entwicklung, die unabhängig von QGIS‑ Versionen, Qt‑ Versionen und Entwicklungsumgebungen funktioniert.
Sie bildet die Grundlage für:
stabile APIs
saubere UI‑ Abstraktion
automatisierte Tests
nachhaltige Weiterentwicklung