J'essaie de configurer la structure de mon application dans VS et je veux "essayer" et la pérenniser à un niveau raisonnable. Cette application sera une réécriture WPF d'une ancienne application Winform qui n'avait suivi aucune convention. Pas de couches, niveaux, acronymes, etc ...
Il s'agit d'une application d'entreprise assez volumineuse. J'avais prévu d'utiliser Linq To SQL comme mes bases de données sont et seront très probablement toujours MS SQL. J'ai également un ensemble de compétences existant avec lui.
Je veux suivre MVVM et DDD du mieux que je peux, mais je suis confus sur la structure de mon application lorsque je les combine. Permettez-moi d'essayer d'illustrer avec quelques exemples.
Lorsque je suis MVVM, ma structure de dossiers peut ressembler à ceci:
Views
Models
ViewModels
Helpers
mais comment cela s'inscrit-il dans une approche en couches DDD simpliste où ma structure de projet pourrait ressembler à ceci:
MyApp.UI
MyApp.Domain
MyApp.Data
Dois-je mettre le Models
dans la couche Domaine ou ai-je 3 versions de say Person
? Cela conduit à une autre question de savoir où placer mon référentiel et les mappages d'objet DB sur un objet de domaine? Je suppose que Data ...
Views
J'irais irais dans l'interface utilisateur mais le ferais ViewModels
aussi?
Enfin, où pourrais-je intégrer ma logique métier?
J'ai trouvé ce qui suit sur CodePlex, Exemple DDD , et cela a été une aide, mais semble être pour une application Web, bien que cela n'ait pas d'importance et que mon ignorance transparaisse.
Ne vous méprenez pas, je sais que je peux avoir autant de dossiers et les appeler comme je veux. J'essaie de comprendre où placer les choses pour que cela soit évolutif, et non pas comment ces endroits sont nécessairement appelés.
Le cœur de ma question pourrait être montré comme ceci.
J'ai un tblPerson
objet généré par *.dbml
. Ceci est évident et appartiendrait à ma couche "Données".
Maintenant, j'aurais un modèle, un DTO, un modèle de domaine, ou quelque chose comme ça dans une couche (projet?) Séparée appelée Person
. Je aurais besoin d' un Mapper
pour Person
à tblPerson
ce que je ne suis pas sûr où mettre.
Ensuite, j'aurai un ViewModel pour, disons, EditPerson
qui aurait ses propres propriétés dont il tire Person
mais peut-être plus aussi.
Enfin, j'aurais une vue liée à ce ViewModel ....
Pour être clair, ce paragraphe est REMPLI de mes hypothèses et de mes suppositions et j'espère que quelqu'un m'aidera à clarifier l'air ou à y offrir des idées afin que dans 6 mois à un an, je ne me donne pas plus de coups de pied que je n'en ai besoin.