Edw*_*uay 39 wpf design-patterns mvvm
似乎我制作的ViewModels看起来像其他类一样可疑,它们似乎需要大量的代码重复,例如在我当前的项目中:
因此,我的ViewModel与我的模型基本相同,只是具有与View绑定的所有OnPropertyChanged功能.
似乎我重构并扩展了我对模型所做的每一点改变,我必须对 ViewModel 进行镜像更改.
这似乎违反了模式的基本规则不要重复自己.
我是否错误地实现了MVVM模式,或者它只是MVVM的固有特性,模型和ViewModel之间始终存在一对一的重复?
mic*_*tan 23
我个人不认为它违反DRY,因为模型和视图模型(我更喜欢术语演示者)不指向相同的信息.例如,您的VM和M都具有Title属性,但您的VM的Title属性也可以包含验证,而您的模型的Title属性可以假定有效性.
虽然虚拟机可能包含模型的所有属性,但也有可能进行验证(例如,标题必须是非空白的),数据依赖性,可绑定的UI特定属性(图标,颜色,画笔,等)不属于视图的一部分.
基本上所有UI模式在您声明它的方式上都有类似的"重复":即级联修改.尝试在不更改控制器的情况下更改MVC中的模型.
话虽这么说,MVVM(或任何用于分离UI,逻辑和状态的UI模式)对于简单的情况(例如您的示例)来说可能过于繁琐.当逻辑变得只是状态传递时,分隔控制器/演示者/视图模型的值减小.
在您的特定情况下,如果您的VM没有任何逻辑,验证或UI特定属性,并且您的模型不必持久化,序列化或向后兼容现有结构(或者在VM中添加逻辑这样做很简单),我强烈考虑将M和VM结合起来以避免创建其唯一目的是获取/设置基础模型属性的属性.