# 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
🎯 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