Je me trouve avec un peu de problème anarchitectural: Je travaille sur un projet smallish qui, entre autres, implique l'entrée de données et la persistance, avec une couche DAL utilisant un service Web avec un protocole JSON personnalisé. Jusqu'à présent, tout va bien, et ce serait une question relativement simple de gifler un peu de code sale DataTable
+ DataGrid
et être fait avec.aide de l'architecture: wpf/mvvm interface d'entrée de données pour webservice json personnalisé
Ceci est un projet d'apprentissage, cependant, et j'essaie de comprendre comment faire un design un peu plus propre, en particulier MVVM avec un gui WPF, en utilisant le framework Caliburn.Micro. La partie serveur est fixe, mais je suis en train de faire toute la partie client, y compris la couche DAL.
Avec le combo DG + DT, il est assez facile de faire un tas de modifications dans la DG, et lorsque l'utilisateur engage parcourons simplement la Rows
, vérifier la RowState
propriété et mise à feu créer/modifier/supprimer des méthodes DAL nécessaire. DataTable
ne semble pas très convivial pour la connexion MVVM, et les ViewModels impliqués ne devraient pas se soucier du type de contrôle de l'interface utilisateur avec lequel ils sont utilisés ... étant donné que la persistance est assurée par un service web, la validation par lots semble nécessaire Assez raisonnable, cependant.
Je réfléchis donc à mes options de conception. Si je comprends bien, la DAL devrait traiter des objets de la couche modèle (je ne pense pas qu'il soit nécessaire d'introduire des DTO pour ce projet), et ceux-ci seront enveloppés dans ViewModels avant d'être databound dans l'éditeur ViewModels. La meilleure idée que j'ai pu trouver jusqu'ici est de faire un clone de la collection des objets à éditer quand je lance un éditeur ViewModel, puis en validant la collection de databound par rapport à la copie - Ça va me permettre de détecter des objets nouveaux/modifiés/supprimés, mais cela semble un peu fastidieux.
J'ai aussi joué avec l'idée de garder IsModified
et IsNewlyCreated
propriétés (je suppose que ceux qui iraient dans le ViewModel?) - garder une trace des éléments supprimés pourrait probablement être traitée en gardant les éléments modifiables dans un ObservableCollection
, la manipulation CollectionChanged
événement, et en ajoutant des éléments supprimés à une liste distincte?
Comme vous pouvez le voir, je suis pas sûr comment gérer cela, et des suggestions serait grandement apprécié :)
1: phase de conception/prototype, les changements sont bien. 3: Caliburn.micro cadre, pas sûr de ce que Prism me donnerait? 4: fonctionnerait mais se sentirait légèrement sale et nécessite une conversion entre la table et l'objet du modèle. 5: oui, et un BindingList me donnerait une notification modifiée, mais a une notification inutile pour l'élément supprimé (* index * de l'élément supprimé * après * l'avoir supprimé) – snemarch