学习新事物需要时间、空间和精力的投入。我目前正在学习 Asp.Net Core MVC 2.0。此ASP.NET Core 教程概述指出:
Razor Pages 是使用 ASP.NET Core 创建 Web UI 的推荐方法
这些信息让我在决定是否必须停止学习 Asp.net Core MVC 并开始学习 Asp.net Core Razor Pages 时感到困惑。
- 为什么 Razor Pages 是在 Asp.net Core 中创建 Web UI 的推荐方法?
欢迎任何方向。
学习新事物需要时间、空间和精力的投入。我目前正在学习 Asp.Net Core MVC 2.0。此ASP.NET Core 教程概述指出:
Razor Pages 是使用 ASP.NET Core 创建 Web UI 的推荐方法
这些信息让我在决定是否必须停止学习 Asp.net Core MVC 并开始学习 Asp.net Core Razor Pages 时感到困惑。
欢迎任何方向。
Razor 页面针对基于页面的工作流进行了优化,并且可以在这些场景中使用,其移动部件比传统 MVC 模型少。这是因为您不需要处理控制器、操作、路由、视图模型和视图(就像您通常那样)。相反,您的路线是基于约定的,并且您的 PageModel 可作为您的 Controller、Action(s) 和 ViewModel 合而为一。当然,页面取代了视图。您也不必像在 MVC 中那样拥有尽可能多的文件夹,从而进一步简化您的项目。
来自ASP.NET Core - Simpler ASP.NET MVC Apps with Razor Pages , Steve Smith于 2017 年 9 月发表的 MSDN 文章:
[Razor Pages] 提供
- 一种在 ASP.NET Core 应用程序中组织代码的更简单方法,使实现逻辑和视图模型更接近视图实现代码。
- 它们还提供了一种更简单的方式来开始开发 ASP.NET Core 应用程序,
那篇文章有更多关于为什么在 MVC 上使用 Razor Pages 进行基于页面的工作流的信息。显然,对于 API,您仍然希望使用控制器。
ASP.NET Core - Feature Slices for ASP.NET Core MVC是 2016 年 9 月的一篇较早的 MSDN 文章,描述了为什么用于组织视图和控制器的经典 MVC 约定可能对大型项目不利。本文给出了四个松散相关的应用程序概念的示例:忍者、植物、海盗和僵尸。本文概述了一种在默认文件夹约定之外构建它们的方法,方法是按功能或责任区域将文件组织到文件夹中。
微软正在回归 WebForms 方法以简化项目结构,相信“约定优于配置”的口头禅,同时对开发人员隐藏配置以加快速度。但它的缺点是一切都会再次混合。这看起来不像是组织的明智之举。但是……嘿!一些新的东西必须引起开发人员对 Microsoft 的注意。
如果您的页面使用 RESTful 的 MVC Web API,那么仅使用 Razor 页面确实更容易。如果没有,我建议您使用 Core MVC。
在大型项目中,模型和控制器都在同一个文件中,维护将是一场噩梦。它适用于只有 2 个属性长的类,但它违反了 OOP 的打开关闭原则。您应该设计和使用可以随时间增长(可扩展)并且仍然稳定且符合逻辑的架构(无需重新构建项目),只需使用相同的模式对其进行扩展即可。
作为一名软件架构师,我会自动使用设计模式。我最喜欢的是Facade设计模式。您将与 Home 相关的所有内容隐藏在 HomeController 后面,您可以对 Repositories 执行相同操作。
想知道一件有趣的事吗?一位导游解释了 Facade 这个名字的来历。在阿姆斯特丹,你有横跨水域的大房子。从外面看,它们看起来很奢华。但从后面看,它们可能很乱。房子的正面隐藏着它背后的东西。设计模式来自建筑世界。好吧,我的应用程序后面的内容看起来也不错,但是很高兴从导游那里了解解释。
Razor 页面中对共享和分组操作的支持怎么样?如果您查看 MVC 控制器,您会发现您可以根据功能对控制器操作进行分组。你可以说主页就是这样一个功能。然后你有一个 HomeController,其中包含 About() 和 Contact(),但对于 Razor Pages,这将是不同的页面。可能你有一个很大的 HomeController,里面有 5 个其他视图。它们都可以分组在同一个 HomeController 中。
控制器有两个 Razor 页面没有的东西:
Razor pages 的处理方式是什么:我认为目录的使用:
问题:对于一个简单的 Home 就足够了。但是假设我们有一个 XController 用于所有操作同一个存储库。您可以在 XController 的 Initializer 函数中初始化该存储库。但是对于 X 子目录中的页面,您必须再次对所有 X 操作执行此操作。那是干的吗?
问题:如果您查看我的修复程序,您会发现我使用目录来解决 Razor 页面的共享和分组问题。
你会怎么做?
或者...是否 Razor 页面仅适用于简单的网站,这可能是此版本 Razor 页面的结论。
Blazor 服务器有一个奇怪的架构。它看起来像一个使用 SignalR 的聊天应用程序。我对此类应用程序的经验是,事件可能会丢失。我不想丢失事件,更好的是它们被堆叠并保证像邮件一样被处理。
2013 年,开发人员在论坛上询问“Microsoft 是什么意思,Silverlight 不是推荐的……???” 只是这一次,MVC 将被宣布为死亡和万岁的 MVVM。您可能会期望 MVC 会慢慢地被扔到废品堆中,但从现在起大约 18 个月后会加速,并且您花在学习 MVC 上的所有时间都将被扔到同一个废品堆中。此外,MVVM 看起来很简单,但需要一年的时间才能掌握并真正做到正确。