我正在努力更好地理解MVVM,从可信的维基百科(以及许多其他研究)中,我收集到ViewModel包含表示逻辑,Model包含业务逻辑。
MVVM图案(图片由维基百科提供)
我的问题是,当模型持有业务逻辑时,逻辑和数据之间的关注点是如何分离的?为什么这是一个很好的模式,为什么我要使用它,而不是使用MVC控制器处理业务和表示逻辑(如果我理解正确)?(我使用的是WPF,根据我的研究,WPF主要使用MVVM,很少使用MVC,我仍然不明白为什么)
将表示逻辑与业务逻辑分离,可以在不直接影响表示逻辑的情况下更改业务逻辑。
例如,如果你有一个RESTful web API来检索视图应该呈现的一些数据,ViewModel不应该直接处理HTTP操作或任何传入数据的转换。ViewModel应该请求一个(分离的)服务类检索该数据,然后ViewModel可以选择如何显示该数据,例如通过分页、排序、过滤等等。你可以选择在web API级别分页,但这是一个实现细节。如果你的API契约发生变化,你可以在不影响表示逻辑的情况下改变web API服务:关注点分离。
让我们把事情弄清楚:
MVC =模型视图控制器
MVVM = Model View ViewModel
使用MVC,控制器控制数据和业务逻辑,模型临时存储数据,视图可以从模型读取数据。在这个模型中,视图处理表示逻辑。在c#中,你可以使用Razor Pages (.cshtml)动态地向视图中插入值。
MVVM非常相似。模型负责保存数据和业务逻辑,视图模型临时保存数据,视图控制表示逻辑。主要区别在于代码中的物理分离。
使用MVC,每个步骤被分离到自己的文件中。使用MVVM,通常将两个或多个步骤合并到一个文件中。这可能是有利的,因为如果您有很多页面,它可以使您避免使用数百或数千行长的控制器。我个人仍然喜欢MVC,因为它保持所有东西分开,而不是组合在一起。