Ich habe eine Beispielanwendung erstellt, um einige Funktionen von wpf zu testen und auszuprobieren. Ich habe im Grunde die Datenbindung in WPF ausprobiert und den Rest der Dinge mehr oder weniger schnell erledigt. Dann stand ich vor einem architektonischen Problem (ja, sollte vorher gedacht haben, bevor ich mit der Programmierung begann :)) und ich wollte wissen, was die beste Refactoring-Lösung dafür ist.Architekturfrage bezüglich der Implementierung und Erweiterbarkeit von Schnittstellen
Ich habe eine einfache Schnittstelle, die eine Liste von Objekten basierend auf einem definierten Prozess zurückgibt.
public interface IDoStuff<out T>
{
IEnumerable<T> Do(string someParam);
}
Ich habe ein paar Implementierungen für diese Schnittstelle erstellt. Dann habe ich einen Blick in wpf, die ein Dropdown mit fest codierten Werte hat, und je nachdem, was Sie wählen, instatiates die Implementierung der Schnittstelle und füllt eine Liste
foreach (var item in new IDoSTuffImplementation1()<MyObj>.Do("imp 1"))
{
MyObjs.Add(item);
}
ater auf MYOBJS die Datacontext für eine Listenansicht ist, und zeigt Dinge und so weiter und so weiter, aber es ist außerhalb der Hauptfrage.
das ist alles hart codiert und nicht sehr nett. Wenn ich jemals eine neue Schnittstelle implementieren würde, müsste ich sie zum Dropdown hinzufügen und eine neue foreach für diese spezifische Implementierung erstellen (mehr duplizierten Code)
Ok, hier ist mein Eindruck auf dieses bessere/Refactoring für Erweiterbarkeit. Ich dachte, ein guter Ansatz wäre, eine Art von MVVM-Muster zu verwenden, die WPF-Ansicht zu einem View + Viewmodel zu machen. Das Viewmodel würde eine Art IoC-ähnliches Spring verwenden, welches (durch xml) eine bestimmte Implementierung der Schnittstelle instanziiert und es in das Viewmodel einfügt, welches dann seine "Do" -Methode aufrufen würde und alle glücklich wären. Auf diese Weise müssen wir nur dann, wenn wir eine neue Komponente implementieren, diese zur XML-Konfigurationsdatei hinzufügen. Vorschläge, Kommentare? Was ist der beste Ansatz, wenn überhaupt? danke !!
das hilft wirklich nicht viel, meine Hauptfrage wird auf die Architektur (und die vorgeschlagene Erweiterung), nicht, wie man die Datenbindung machen. –
Sie haben MVVM erwähnt und deshalb habe ich vorgeschlagen, dass Sie eine "Eigenschaft" anstelle einer "Methode" verwenden. MVVM basiert auf 'Notifications',' Data Binding' und 'Commands'. Verwenden Sie 'Unity' oder' MEF' als 'IoC'. – decyclone