首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF MVVM与Razor Page MVVM

WPF MVVM与Razor Page MVVM
EN

Stack Overflow用户
提问于 2019-03-11 11:31:30
回答 1查看 4.8K关注 0票数 6

WPF中的MVVM模式非常强调将ViewModel与UI完全分离,而且理想情况下,代码隐藏文件中没有或很少包含任何内容。这允许对不同类型的接口重用ViewModel。

Razor页面中的MVVM模式将代码隐藏作为ViewModel,并与OnGet和OnPost方法的web逻辑紧密耦合。

因此,精心编制的解耦的WPF ViewModel不能充当ViewModel (或者可以从网页模型中使用?)

我是不是遗漏了什么,为什么WPF中的MVVM (解耦的)和Razor页面中的MVVM (耦合)之间有如此的区别?

如果我们将Razor方法应用于WPF,那么代码--幕后代码--将成为ViewModel --我从未见过有人推荐它。

EN

回答 1

Stack Overflow用户

发布于 2019-03-11 12:31:02

我不知道为什么您坚持使用Razor页面,当有MVC ()时。

您应该使用MVC模式。您得到相同的剃须刀语法,但解耦。

剃须刀页面是作为WebForms的后继形式引入的(它本身试图模仿Windows,这两者都不是关于解耦的)。

如果我们追溯到几年前的历史,MVVM将使用WPF的双向模型绑定的全部功能,它作为UI和应用程序层之间的一个独立层,可以将表示逻辑放入其中(逻辑紧密耦合到表示中,这是一个UI关注点,而不是与UI分离的应用层)。

由于这个原因,MVVM的ViewModels (除了模型绑定的属性之外)还具有命令之类的东西,并且可能是导航感知的(即通过棱镜的INavigationAware接口)。

在这种情况下,ViewModels在服务器端web应用程序中没有多大价值,因为HTTP本身是无状态的,ViewModels在这里维护状态。

因此,MVC中的ViewModels被简化为DTO(数据传输对象),它具有基本的验证(通过验证属性)。MVC应用程序中的ViewModels没有任何表示逻辑,因为它被呈现为HTML,而且大多数表示逻辑都是通过JavaScript在外部发生的(单击按钮会发生什么情况,如何为用户格式化日期或货币)。

尽管如此,在一个ViewModels核心应用程序中,您并不需要使用完整的ASP.NET,至少对于服务器端的部分是这样的。但是,如果您使用的是客户端技术( Vue.js、React),则可以使用ViewModels增强功能并将其与视图分离。

实际上,角分量基本上是ViewModels,并完成与MVVM模式中的ViewModels相同的任务(可以将服务注入其中,有单向或双向绑定,输入验证,并将表示逻辑放入其中)。

TL;DR:您实际上并不需要ViewModels,因为它们是在MVVM中定义的,只是DTO类类使在(Razor)视图模板中使用它们更容易。不要使用Razor页面进行解耦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55100912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档