Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Plugin-Konzept Datenzugriffe/Unbekannte Mengen
iSliver
myCSharp.de - Member



Dabei seit:
Beiträge: 59

Themenstarter:

Plugin-Konzept Datenzugriffe/Unbekannte Mengen

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
malignate
myCSharp.de - Member

Avatar #avatar-3206.png


Dabei seit:
Beiträge: 751

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
iSliver
myCSharp.de - Member



Dabei seit:
Beiträge: 59

Themenstarter:

beantworten | zitieren | melden

Danke für die sinvollen Antworten.
Ich werde das mit den Repos mal durchlesen und versuchen umzusetzen.
private Nachricht | Beiträge des Benutzers