什么进入Model/Viewmodel?

Eri*_*rik 0 c# wpf mvvm

什么去哪儿?

这是我的C#项目的简短描述:

我有一个机械结构(在整个程序中只有一个),由大约20到30个参数(deimensions,材料参数等)描述,作为一个完整的集合,可以来自输入屏幕或来自XML文件(反序列化) ).然后必须在计算中处理这些参数以生成输出,该输出将转换为JPEG文件以及HTML文件.

视图很清楚:它是IO屏幕.

View需要一个属性所在的ViewModel.也许:

我的模型是手头的结构,由其参数描述.但是,这些参数与从IO屏幕,视图或XML中收集的参数相同.

某些输出(JPEG文件)也是视图.它可能是一个通知它已更改的属性.

现在我的问题是,我是否需要一个模型,因为ViewModel已经具有所有属性.

或者,我是否需要ViewModel,因为我的模型具有要查看的所有属性.我可以在ViewModel中定义一个Model(就像它总是在MVVM中完成)并使用Model作为View的DataContext.但是最后一个选项会让View意识到模型:不是MVVM精神.

wal*_*her 6

我已经多次写过了这篇文章,但我会再次这样做...

MVVM背后的主要原因是分离层并尽可能避免紧密耦合.

那就是说View,正如你已经正确猜到的那样,用户界面.用户看到的东西.无论是Windows,页面,自定义控件,网页甚至是控制台(当我们在更广泛的背景下讨论MVVM时)都无关紧要.

ViewModel是模型和视图之间的中介.为了View的目的,它从模型中获取,组合和操作您的方法和属性.它并不关心这些使用的方式,时间和地点.它还可以触发模型端的操作,例如负责更新数据库的调用服务.

Model是一切与特定平台无关的一切.它是您的业务逻辑类,它是数据库实体等.它基本上是您的应用程序剥离了与UI实现的任何联系.这就是人们出错的地方,并认为模型只是数据库实体.那是完全错的!


要回答你问过的问题:"现在我的问题是,我是否需要一个模型,因为ViewModel已经拥有了所有属性."

是的,您应该,否则您最终会将视图直接耦合到模型,这违反了MVVM原则.您的视图不应直接了解该模型的任何内容.就View而言,每个属性和方法都可以来自不同的项目.它不会改变一个东西,视图仍然会起作用.

你可能还没有看到它,但将来它会让你的生活更轻松.如果正确完成,代码变得易于维护,更易读等.