Laden...

Plugin-Konzept Datenzugriffe/Unbekannte Mengen

Erstellt von iSliver vor 10 Jahren Letzter Beitrag vor 10 Jahren 712 Views
I
iSliver Themenstarter:in
57 Beiträge seit 2011
vor 10 Jahren
Plugin-Konzept Datenzugriffe/Unbekannte Mengen

Hallo,
ich hab mal eine Frage zu einer Struktur, wie sie am logischsten aufgebaut werden sollte.
Ich verwende aktuell eine Plugin Architektur in der Plugins relativ eigenständig sind.
Jetzt will ich Daten aus dem Hauptprogramm den Plugins zur Verfügung stellen, nur habe ich mehr Daten, als ein bestimmtes Plugin brauch.
Als Beispiel habe ich 1000 Einträge in x Tabellen in einer Datenbank, das Plugin brauch aber nur x Einträge aus n Tabllen,mit einem bestimmten Typ,wobei sich Änderungen im Plugin auch auf die Datenbank auswirken sollen.

Also stellt sich die Überlegung ob ich den Plugins die Datenbankconnection geben soll und jedes Plugin selber die Daten verarbeitet(redundanz?) oder lieber im Hauptprogramm bei jedem Plugin eventbasiert prüfen soll welche Daten weitergegeben werden sollen und diese dann in einer Liste bereitstellen ?
Mir stellt sich die Frage wie man das logisch umsetzt, also eine 2 wege kommunikation von Plugin zu Host mit nicht wirklich festgelegten Daten.
(Mit nicht wirklich meine ich, dass jedes Plugin andere Daten in verschiedenen Mengen benötigt und auch auf Bedarf abrufen kann)

742 Beiträge seit 2005
vor 10 Jahren

Das kommt auf deine Architektur an. Anfangen würde ich damit, den Zugriff auf die Daten (Files, SQL, etc.) über Repository Patterns zu wrappen The Repository Pattern Example in C#

Dann hast du die Möglichkeit in den Plugins relativ einfach Daten zu lesen und zu schreiben, ohne dass du dich um die Details kümmern musst.

Natürlich musst du den Plugins die Repositories übergeben, dafür bietet sich Dependency Injection an Dependency Injection: A Beginner’s Guide

Im Prinzip bietet deine Anwendung dann Dienste an, wie zum Beispiel die Repsositories oder irgendwelche "Manager", die dann von den Plugins angefordert und verwendet werden.

Wenn deine Plugins sehr eigentständig sind, wie zum Beispiel in einem Weblog, dann sollten sie natürlich auf komplett selbst für die Datenverwaltung inklusive Anlegung von Tabellen etc. verantwortlich sein. Bzw. es ist auch möglich beides zu kombinieren.

A
350 Beiträge seit 2010
vor 10 Jahren

Ich nutze die Variante, dass das Plugin bei der Hauptassembly nach Daten fragt und diese liefert.
Ich fände es recht unglücklich, wenn mein Plugin direkt mit ner DB kommunizieren dürfte/könnte.
Andererseits, schaut man sich zB Miranda an, hat jedes Plugin für ein Protokoll die Möglichkeit selbstständig eine Verbindung aufzubauen.

Sei es drum, für DB Zugriffe würde ich die Variante Plugin fragt Main bevorzugen

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Ahrimaan,

da die Host-Anwendung üblicherweise die Plugins kennt, sollten die Plugins nicht die Host-Anwendung kennen, um zyklische Abhängigkeiten zu vermeiden. Das ist aber auch gar nicht nötig, wenn die Host-Anwendung dem Plugin ein Repository-Objekt übergibt, wie es malignate vorgeschlagen hat.

herbivore

A
350 Beiträge seit 2010
vor 10 Jahren

Hallo Herbivore,

ja ich gebe dir Recht.
Im falle unseres Programms haben die Plugins aber Events, an die sich der Host "klammert"
Das Plugin feuert dann, wenn es Daten benötitgt, das Event ab und der Host reagiert.

Von daher kenne sich beide nicht sondern nur das Interface

I
iSliver Themenstarter:in
57 Beiträge seit 2011
vor 10 Jahren

Danke für die sinvollen Antworten.
Ich werde das mit den Repos mal durchlesen und versuchen umzusetzen.