4.1 KiB
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:
- 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
-
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.
-
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.
- Einheitliche API für alle Plugins Plugins greifen nicht mehr direkt auf QGIS zu, sondern nutzen:
- 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 Aufgrund des Umfangs ist der Wrapper für die Layerbehandlung aufgeteilt:
- ly_existence_wrapper
- ly_geometry_wrapper
- ly_Metadata_wrapper
- ly_style_wrapper
- ly_visibility_wrapper
- 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. Alle Fach-Plugins nutzen den Dockmanager des Basisplugins.
Designprinzipien
-
Single Source of Truth Jede QGIS‑ oder Qt‑Funktionalität wird nur an einer Stelle implementiert.
-
Austauschbarkeit Mock‑Modus und Echtmodus sind vollständig austauschbar.
-
Testbarkeit Jede Funktion kann ohne QGIS getestet werden.
-
Saubere Trennung
- UI → qt_wrapper
- QGIS‑Core → qgiscore_wrapper
- QGIS‑UI → qgisui_wrapper
- Logik → settings_logic, layer_logic, prüfmanager, …
- Erweiterbarkeit Neue Wrapper können jederzeit ergänzt werden, ohne bestehende Plugins zu brechen.