2

窗口的主部分包含一个 DataGrid。详细信息部分显示一个表单,允许编辑当前在主数据网格中选择的记录。Grid 的 SelectedItem 绑定到主 vm。当该属性更改时,主 vm 创建一个新的 EditViewModel,并通过属性公开它。视图的详细信息部分将此属性用作其 DataContext。

在执行取消之类的命令时,您会将它们放在主视图模型还是详细视图模型中?

详细信息视图模型负责用户与记录的交互。有人可能会争辩说,这一责任包括删除。另一方面,有人可能会争辩说,主视图负责用户与集合的交互,并且由于删除正在修改集合,因此应该在其中放置删除功能。

谢谢你,

编辑:澄清——通过“实现命令”,我的意思是实现要求服务层执行请求的操作的代码。

4

3 回答 3

5

我认为您的第二个论点比您的第一个论点强得多。

只是个人意见,但在我看来,删除是收藏的问题,而不是个人记录。

于 2010-07-13T22:19:34.007 回答
2

我同意 Ian 的回答,但我个人认为 UI 逻辑和模型逻辑之间的区别很重要。

因此,如果此时删除主要来自 UI 列表,那么将删除放在集合 VM 中很有意义。

一旦您开始谈论使用模型(例如从数据库中删除记录),那么记录可能是此逻辑的正确位置。

另外我想说,这种影响模型的逻辑应该被移入领域模型并移出视图模型,让虚拟机尽可能只负责 UI 逻辑,而领域模型则成长为丰富的表达式的业务逻辑。

于 2010-07-14T02:33:26.930 回答
0

每条记录只知道它自己。它甚至不应该意识到它是集合的一部分,它本身就是一个实体。主虚拟机有一个记录集合,所以它应该负责修改。

我也同意 David 关于分离 UI 逻辑和业务逻辑的观点,远离意大利面条式代码,因为如果您的业务模型发生变化,它会破坏您的视图模型代码,而且它符合 DRY 原则。

于 2010-07-14T12:48:06.920 回答