Ich versuche, die Struktur meiner Anwendung in VS einzurichten, und ich möchte sie auf ein vernünftiges Maß "testen" und zukunftssicher machen. Diese Anwendung wird eine WPF-Neuschreibung einer alten Winform-Anwendung sein, die keine Konventionen befolgt hat. Keine Ebenen, Ebenen, Akronyme usw.
Es ist eine ziemlich große Unternehmensanwendung. Ich hatte vor, Linq To SQL so zu verwenden, wie es meine Datenbanken sind, und werde höchstwahrscheinlich immer MS SQL sein. Auch ich habe eine vorhandene Fähigkeit, die mit ihr festgelegt wird.
Ich möchte MVVM und DDD so gut ich kann folgen, aber ich bin verwirrt über die Struktur meiner Anwendung, wenn ich diese kombiniere. Lassen Sie mich versuchen, mit einigen Beispielen zu veranschaulichen.
Wenn ich MVVM folge, sieht meine Ordnerstruktur möglicherweise so aus:
Views
Models
ViewModels
Helpers
aber wie passt das zu einem simplen DDD-Ansatz mit mehreren Ebenen, bei dem meine Projektstruktur etwa so aussieht:
MyApp.UI
MyApp.Domain
MyApp.Data
Muss ich das Models
in die Domain-Ebene legen oder habe ich 3 Versionen von say Person
? Dies führt zu einer weiteren Frage, wo ich mein Repository und die Zuordnungen von DB Object zu Domain Object ablegen würde. Ich würde Daten annehmen ...
Views
Ich würde in UI gehen, aber würde ViewModels
auch?
Wo würde ich schließlich meine Geschäftslogik einbetten?
Ich habe Folgendes bei CodePlex, DDD Example , gefunden und es war eine Hilfe, scheint aber für eine Web-App zu sein, obwohl dies möglicherweise keine Rolle spielt und meine Ignoranz durchscheint.
Versteh mich nicht falsch, ich weiß, ich kann so viele Ordner haben und sie anrufen, wie ich will. Ich versuche herauszufinden, wo Dinge platziert werden müssen, damit diese skalierbar sind und nicht, wie diese Orte notwendigerweise genannt werden.
Das Herz meiner Frage könnte so dargestellt werden.
Ich habe ein tblPerson
Objekt generiert von *.dbml
. Das liegt auf der Hand und würde in meine "Daten" -Schicht gehören.
Jetzt hätte ich Model, DTO, Domain Model oder wie auch immer es heißt in einer separaten Ebene (Projekt?) Genannt Person
. Ich würde ein Mapper
dafür brauchen Person
, tblPerson
dass ich nicht sicher bin, wo ich es hinstellen soll.
Dann habe ich ein ViewModel für, sagen wir, EditPerson
das seine eigenen Eigenschaften hat, von denen es Person
aber möglicherweise auch mehr zieht .
Endlich hätte ich eine Ansicht, die an dieses ViewModel gebunden war ...
Um klar zu sein, dass dieser Absatz mit meinen Annahmen und Vermutungen GEFÜLLT ist und ich hoffe, dass jemand mir dabei hilft, die Luft zu reinigen oder mir Einblicke zu bieten, so dass ich mich in 6 Monaten bis zu einem Jahr nicht mehr aufmische, als ich muss.