我发现自己遇到了一些无架构问题:我正在从事一个小型项目,其中涉及数据输入和持久性,其中 DAL 使用带有自定义 JSON 协议的 Web 服务。到目前为止,一切都很好,将一些快速&肮脏的代码拼凑在一起并完成它将是一件相对简单DataTable
的DataGrid
事情。
然而,这是一个学习项目,我试图弄清楚如何使用 Caliburn.Micro 框架进行更简洁的设计,特别是带有 WPF gui 的 MVVM。服务器部分是固定的,但我正在做整个客户端部分,包括 DAL。
使用 DG+DT 组合,在 DG 中进行大量编辑非常容易,当用户提交时,只需迭代Rows
、检查RowState
属性并根据需要触发创建/更新/删除 DAL 方法。DataTable
不过,似乎对 MVVM 数据绑定不太友好,而且所涉及的 ViewModel 不应该关心它们正在使用什么样的 UI 控件......鉴于持久性是通过 Web 服务完成的,因此需要批量提交修改似乎是合理的不过,够了。
所以我在思考我的设计选择是什么。
据我了解,DAL 应该处理模型层对象(我认为没有必要为这个项目引入 DTO),并且这些将在被数据绑定到编辑器 ViewModels 之前包装在 ViewModels 中。
到目前为止,我能想到的最好的想法是在启动编辑器 ViewModel 时克隆待编辑的项目集合,然后在提交时根据副本检查数据绑定集合 - 这将让我检测新/修改/删除的对象,但似乎有些乏味。
我还玩弄了保留IsModified
和IsNewlyCreated
属性的想法(我猜那些会放在 ViewModel 中?) - 可以通过将可编辑项目保留在 中来处理已删除项目ObservableCollection
,处理CollectionChanged
事件并将已删除项目添加到单独的列表?
如您所见,我非常不确定如何处理这个问题,任何建议将不胜感激:)