窗口的主部分包含一个DataGrid。详细信息部分显示一个表单,允许编辑主DataGrid中当前选定的记录。网格的SelectedItem绑定到主vm。当该属性发生更改时,主vm将创建一个新的EditViewModel,并通过属性公开它。视图的details部分使用此属性作为其DataContext。
在实现诸如cancel之类的命令时,您会将它们放入主视图或详细信息视图模型中吗?
细节视图模型负责用户与记录的交互。可以说,这一责任包括删除。另一方面,可以说主视图负责用户与集合的交互,而且由于删除正在修改集合,因此应该将delete功能放在其中。
谢谢,
本
编辑:澄清--通过“实现命令”,我指的是实现要求服务层执行所请求的操作的代码。
发布于 2010-07-13 14:19:34
我认为你的第二个论点比你的第一个论点强得多。
只是个人的意见,但在我看来,删除似乎是一个关注的收集,而不是个人记录。
发布于 2010-07-13 18:33:26
我同意Ian的回答,但我个人认为UI逻辑和模型逻辑之间的区别很重要。
因此,如果此时删除主要来自UI列表,那么将删除放在集合VM中就很有意义了。
一旦您开始讨论如何使用该模型(例如,从数据库中删除记录),那么这些记录可能是这个逻辑的正确位置。
此外,我还要说,这种影响模型的逻辑应该移到域模型和视图模型之外,让VM尽可能多地负责UI逻辑,而域模型则发展为业务逻辑的丰富表达式。
发布于 2010-07-14 04:48:06
每一张唱片都只知道自己。它甚至不应该意识到它是一个集合的一部分,它本身就是一个实体。主VM有一个记录集合,因此它应该负责修改。
我也同意David关于将UI逻辑和业务逻辑分离开来的观点,不要使用意大利面代码,因为如果您的业务模型发生了更改,它将破坏您的视图模型代码,而且它将遵循枯燥的原则。
https://stackoverflow.com/questions/3241858
复制