Announcement

Collapse
No announcement yet.

Gemeinsame Datenbasis für Module

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gemeinsame Datenbasis für Module

    Hallo Community,

    ich hab ein etwas komplexeres Problem.

    Ich bin im Moment dabei, Anwendungen zu entwickeln, die unabhängige Module zur Laufzeit laden können.

    Ich benutze dazu zwei Interfaces:

    [highlight=c#]
    public interface IModule
    {
    GUID Guid { get; }
    String Name { get; }
    String Description { get; }
    String Author { get; }
    Version Version { get; }
    UserControl MainFrame { get; }
    List<GUID> RequiredModules { get; }
    IModuleHost HostApplication { get; set; }
    }

    public interface IModuleHost
    {
    Dictionary<GUID, IModule> Modules { get; }
    }
    [/highlight]

    Sinn ist, dass ich eine Anwendung als IModuleHost deklariere, auf der anderen Seite beliebige Bibliotheken als IModule.

    Via
    [highlight=c#]
    private Dictionary<GUID, IModule> dictModules;
    ...
    String[] moduleFiles = Directory.GetFiles("Modules", "*.dll");
    foreach (String file in moduleFiles)
    {
    Assembly ass = Assembly.LoadFrom(file);
    foreach (Type T in ass.GetTypes())
    {
    if (T.GetInterface("ModuleInterface.IModule") != null)
    {
    IModule oMod = (IModule)Activator.CreateInstance(T, this);
    dictModules.Add(oMod.Guid, oMod);
    }
    }
    }
    [/highlight]
    werden dann die Module geladen. Funktioniert soweit prima.

    Das Problem ist, dass zu diesem Zeitpunkt alle Module voneinander unabhängig sind.

    Jetzt würde ich aber gern erreichen, dass ich von einem Modul auf die Daten eines anderen zugreifen kann. Also brauche ich sowas wie eine Datenbasis, über die alle Module miteinander kommunizieren können.

    Hat jemand eine Idee, wie man sowas am besten realisieren könnte?
    Meine erste Idee war, dass der ModuleHost eine Datenbank mitbringt, in der sich dann jedes Modul eigene Tabellen erstellt, auf die andere Module dann natürlich auch zugreifen könnten. Aber irgendwie gefällt mir die Idee nicht...
    Das mutet so improvisiert an...

    Danke für konstruktive Beiträge!
    ArkonRogg

  • #2
    Natürlich kannst du einfach irgendwo einen gemeinsamen Speicher anlegen auf den alle zugreifen können. Aber um eine andere/bessere Lösung vorzuschlagen oder diese als ausreichend zu bewerten bräuchte man mehr Details.

    Vielleicht hilft es dir wenn du dir mal ein paar der typischen Anwendungsframeworks ansiehst also z.B. Prism oder SCSF von Microsoft oder das Spring.Net Framework etc. Dort sind solche Probleme und andere die man bei dynamisch zusammengesetzten Anwendungen hat (z.B. wie schicke ich jemanden einen Event den ich nicht direkt kenne, wie löse ich Abhängigkeiten zwischen Modulen beim laden auf etc.) bereits gelöst.

    Comment


    • #3
      hallo,
      bei einer Software die wir einsetzen löst das sehr schlicht, wir haben es dann erst auch mal so begonnen weil uns nichts besseres einfiel. Die Daten werden bei der Anwendung in einer MSSQL-Tabelle gespeichert. Dort werden einfach alle der möglichen Tabellen angelegt bzw. bei Updates erweitert. Die Anwendung in den verschiedenen Ausbaustufen nutzt dann nur die Tabellen die sie braucht.

      Upgrades sind einfach. Als eventueller Nachteil fällt mir nur ein dass man in den kleinen Versionen seine Tabellenstruktur preisgibt wenn man die Datenbank als Admin direkt öffnet.

      Die Datenbankstruktur wird über eine Schemadefinition als Text oder xml auf Erweiterungen angepasst. Das neue Schema bringt jede Version der Software mit.

      Comment

      Working...
      X