Ich entwickle derzeit eine Lösung, bei der das Domänenmodell und das Repository durch Anwendungsplugins erweitert werden können. Nun bin ich auf ein paar Probleme gestoßen, die ich im Folgenden aufliste.
-
Mein erstes Problem ist, das Domänenmodell erweiterbar zu machen. Ich dachte über die Verwendung von Vererbung hier, aber ehrlich gesagt, ich habe keine Ahnung, wie ich mehrere Plugin-Assemblies, die das gleiche Domain-Objekt erweitern nutzen können. Ich bin irgendwie in Richtung machen jedes Domain-Objekt teilweise und ermöglicht Plugins erweitern Sie es auf diese Weise lehnen. Für den Fall, dass ich mehrere Plugins haben, die das gleiche Domain-Objekt erweitern, werde ich nicht über das Laden von verschiedenen erweiterten Domain-Assemblies für jedes Plugin zu kümmern. Ich würde immer noch nur ein zusammengeführtes Domänenobjekt zur Laufzeit haben. Irgendwelche Ideen dazu?
-
Ein weiteres Problem ist die Erweiterung der NHibernate-Zuordnungsdatei. Ich könnte jede Assembly eine Mapping-Datei für das Domänenobjekt einbetten lassen, das sie erweitert, und meinen NHibernate-Manager diese Datei anstelle der in der Kerndomäne bereitgestellten laden lassen. Noch einmal, das Problem ist, was, wenn ich mehrere Plugins haben, die das gleiche Domänenobjekt erweitern. Ich könnte ein Plugin haben, das die Mapping-Datei für ein anderes überschreibt. Die Lösung, die ich für das letzte Problem habe, ist nicht so toll, aber ich habe darüber nachgedacht, eine Prüfsumme in die Plugin-Assembly als Signatur für die ursprüngliche Mapping-Datei aufzunehmen, die es vor der Erweiterung verwendet hat. Ich kann diese Prüfsumme beim Laden überprüfen und die Plugin-Map nur laden, wenn die Prüfsummen übereinstimmen. Ziemlich hässlich, aber zumindest werde ich keine Maps überschreiben, die sich von der Basismap unterscheiden, die zur Erweiterung in der Plugin-Assembly verwendet wird.
Wie auch immer, ich würde gerne hören, was ihr darüber denkt. Danke!