Ich wollte unser MVVM WPF/Prism Projekt schon mal für einen Blend UI Designer aufteilen. Bin mir aber nicht ganz sicher wie ich unsere Projekte Aufteilen soll. Hie mal ein Vorschlag:
Contracts Projekt für Interfacees - VM Interfaces - Model Command Interfaces
View Projekt - Views (XAML und Code Behind) - VM Implementierung - UICommands Implementierung (mit Aufrufe von ModelCommands) - IOC/DI Registrierung der eigenen Implementierungen
"Code" Projekt - Prism Modules - Presenter - ModelCommands Implementierung - IOC/DI Registrierung der eigenen Implementierungen
Theme Projekt - für UI Controls und Theme
Ist das der richtige Weg? oder gibt es eine einfachere Methode?
Bei den VMs/Commands ist die Frage, ob du sie unabhängig von der View ausgetauscht haben möchtest (tritt der Fall ein?) bzw. wie diese in deinem Fall genau konfiguriert werden. Wenn du die Möglichkeit hast, VMs aus einem anderen Projekt zu injecten (um die Default-Implementierung auszutauschen), dann können sie durchaus drinnen bleiben. Es stellt sich auch die Frage, wie viel Logik deine VMs mitbringen, oder ob eine Anpassung in deinem Fall auch eine Anpassung der View mit sich bringt.
Ich finde deine Aufteilung ziemlich gut. Ich nehme mal an, mit VM Implementierung meinst du die ViewModels? Die würde ich auf jeden Fall in das Code-Projekt nehmen, damit sie unabhängig von der View bleiben.
Sehe ich genauso. Es hängt davon ab, was später einmal ausgetauscht werden sollte/könnte. Wie ich die Erfahrung gemacht habe, komme ich mit einem einzigen ViewModel aus (es liegt im Code/Core-Package), injecte aber unterschiedliche DataAccess-Implementierungen, damit die Anwendung sowohl unter WPF als auch Silverlight mit derselben Codebasis lauffähig ist.
Die Aufteilung erscheint anfangs recht aufwändig, vor allem wenn die Software auf Teilsystemen basiert, die allesamt diese Struktur aufweisen. Die Projektstruktur insgesamt profitiert aber enorm davon, da unterschiedliche Abstraktionsebenen auch physisch getrennt sind (unterschiedliche Projekte).
Wenn du Zeit findest und eine alternative View-Implementierung anfertigst und zum Laufen bringst, wird es dir wie Schuppen von den Augen fallen, wie man so schön sagt.
Hi, ja mit VM hatte ich ViewModels gemeint. Sollte die Implementierung der UICommands auch in der View sein? Die VM Implementierung habe ich deshalb in die View genommen, um für Blend Beispieldaten anzulegen. (Besteht fast ausschließlich aus getter und setter)