0

我发现自己遇到了一些无架构问题:我正在从事一个小型项目,其中涉及数据输入和持久性,其中 DAL 使用带有自定义 JSON 协议的 Web 服务。到目前为止,一切都很好,将一些快速&肮脏的代码拼凑在一起并完成它将是一件相对简单DataTableDataGrid事情。

然而,这是一个学习项目,我试图弄清楚如何使用 Caliburn.Micro 框架进行更简洁的设计,特别是带有 WPF gui 的 MVVM。服务器部分是固定的,但我正在做整个客户端部分,包括 DAL。

使用 DG+DT 组合,在 DG 中进行大量编辑非常容易,当用户提交时,只需迭代Rows、检查RowState属性并根据需要触发创建/更新/删除 DAL 方法。DataTable不过,似乎对 MVVM 数据绑定不太友好,而且所涉及的 ViewModel 不应该关心它们正在使用什么样的 UI 控件......鉴于持久性是通过 Web 服务完成的,因此需要批量提交修改似乎是合理的不过,够了。

所以我在思考我的设计选择是什么。

据我了解,DAL 应该处理模型层对象(我认为没有必要为这个项目引入 DTO),并且这些将在被数据绑定到编辑器 ViewModels 之前包装在 ViewModels 中。

到目前为止,我能想到的最好的想法是在启动编辑器 ViewModel 时克隆待编辑的项目集合,然后在提交时根据副本检查数据绑定集合 - 这将让我检测新/修改/删除的对象,但似乎有些乏味。

我还玩弄了保留IsModifiedIsNewlyCreated属性的想法(我猜那些会放在 ViewModel 中?) - 可以通过将可编辑项目保留在 中来处理已删除项目ObservableCollection,处理CollectionChanged事件并将已删除项目添加到单独的列表?

如您所见,我非常不确定如何处理这个问题,任何建议将不胜感激:)

4

1 回答 1

1

首先

1- 在达到无法不更改代码的地步之前不要进行任何更改。

2- 正如您已经说过的那样,您正在创建一个学习项目,并且您想要更多模块化的应用程序,因此我的想法将围绕如何首先使我的应用程序更加模块化,然后再深入研究实现细节。

3-您是否考虑过使用 Prism + MVVM 框架?

4-我仍然建议在您的 ViewModel 中,您仍然可以使用 DataTable 将数据绑定到网格,并且使用 DataTable.GetChanges() 方法将为您提供表中的所有更改,因此您无需维护布尔值IsNew 或 IsModified 等变量。

5- 如果您不相信使用 DataTable 而不是使用 ObservrableCollection 将数据绑定到网格。ObservrableCollection 不会通知单个项目发生变化,它只会在项目被添加或删除时通知。

于 2010-11-15T01:36:03.413 回答