Razor 页面和 MVVM 模式:探索关系(MVC 或 MVVM 或...)

问题描述 投票:0回答:1

我对 ASP.NET Core 中 Razor Pages 的架构感到困惑。一些消息来源声称 Razor Pages 遵循 MVC 模式,而另一些消息来源则认为它们遵循 MVVM 模式。有人可以阐明 Razor Pages 的架构并解释它们是否应该被视为 MVC 模式、MVVM 模式或完全其他模式的一部分?

我的看法: 我不相信它遵循 MVVM 模式,因为请求是在页面模型(MVVM 的 ViewModel)内发出的,而不是在视图内发出的。因此,它不遵守 MVVM 原则。

它看起来是一个 MVC 结构,页面模型中包含 C 和 M 组件。

一些相关链接

关于 razor,.NET MVC 对 razor 的支持与 .NET razor 页面之间有什么区别?是否有称为 .NET MVC razor 页面的东西?

WPF MVVM 与 Razor 页面 MVVM

asp.net-core .net-core asp.net-core-mvc razor-pages
1个回答
0
投票

以我的拙见,Razor Page 应用程序不应该是 MVC 应用程序,因为它在项目中不包含

Controller
,这意味着它不是 C。同时,asp.net core 有一个单独的 MVC 应用程序模板,它使用
builder.Services.AddControllersWithViews + app.MapControllerRoute
而不是
builder.Services.AddRazorPages() + app.MapRazorPages()

MVC 和 MVVC 中的数据处理:

MVC 有控制器来处理数据,可能还有服务层和 Repo 层,然后视图绑定模型,在控制器中我们需要准备好所有数据,然后填充模型,以便我们可以使用“asp-for =”之类的代码@model.property”来显示数据。如果我们想要更新视图,我们需要联系控制器或者编写JS代码来操作DOM。

对于 MVVM,它不包含控制器,因此应用程序本身应该处理“路由”,然后它使用 ViewModel 准备所需的数据。它确实有利于“松耦合”。由于视图具有与 ViewModel 的数据绑定,因此一个视图具有相应的 ViewModel 来收集所需的数据并公开许多填充了已处理数据的属性。我们不需要操作DOM。这种设计模式通常用于前端-后端 api 服务器模式的单页应用程序。我们在单独的应用程序中查看代码,而数据是从外部应用程序发送的。在这方面,Razor Page应用程序看起来与MVVM类似,因为它在没有控制器的情况下处理路由,它在PageModel中定义了许多属性(例如Index.cshtml.cs)并将属性绑定在View中,但本质上Views和ViewModel都来自服务器Web应用程序,这里的ViewModel是Controller + Model的组合,所以它是一个假ViewModel。

总结:我更喜欢将 Razor Page Web 应用程序称为传统 MVC 的替代品,它不是 MVC 应用程序,因为它没有控制器,它结合了控制器(路由 + 数据收集和处理)和视图在一起,它只需更少的代码即可实现与 MVC 相同的功能。但它既是一个 Web 应用程序,也是一个 MVC 应用程序。它也类似于 MVVM 模式,无需控制器即可处理路由并具有数据绑定,但由于它不是 SPA 并且数据是从 Web 应用程序内部收集的,而不是从外部系统收集的,因此它不应该是 MVVM,因为 MVVM(模型- view-viewmodel)没有数据源,它应该从外部资源收集ViewModel中的数据。

© www.soinside.com 2019 - 2024. All rights reserved.