带有 Razor 页面的 ASP .Net Core 与 UI 的 Angular [关闭]
Posted
技术标签:
【中文标题】带有 Razor 页面的 ASP .Net Core 与 UI 的 Angular [关闭]【英文标题】:ASP .Net Core with Razor Pages Vs Angular for UI [closed] 【发布时间】:2019-10-18 16:29:55 【问题描述】:我们的企业应用程序是一个大型(1000 多页)应用程序,主要是美化的数据输入应用程序。没有主要的业务流程。所有大多数页面都有 CRUD。我们正在尝试将整个应用程序从旧代码库 (C/C++) 重新架构 - 桌面应用程序到基于 Web 的应用程序。
我们从 Angular 开始,但对 javascript 的知识有限,这是一个陡峭的学习曲线。仅供参考:我们所有的开发人员都知道 C#。我们发现让新开发人员进入 Angular/Javascript 世界非常困难。
综上所述,我正在研究 ASP .Net Core + Razor Pages,发现与 Angular 相比,它更容易转换。这些是我目前看到的优势:
-
在 html 中处理 C# POCO 以进行绑定。无需转换为
基于 TS 的 POCO。
使用数据注释进行模型级验证
API 级别的默认路由或自定义路由。一处定义
路由。
最少的 JavaScript 使用。仅供参考:也尝试使用 WebAssembly。我们也在研究 Blazor
既然是数据录入系统,那么客户端渲染和服务器端渲染有什么关系呢?
与 ASP .Net Core 2 + Razor Pages 相比,使用 .Net Core Web API 选择 Angular 是否有更好的优势?
【问题讨论】:
【参考方案1】:从头开始,我建议您使用 Blazor 服务器端 SPA 应用程序。
为什么要使用SPA
SPA 在设计上类似于桌面应用程序 最适合与数据输入表格一起使用 我猜你的团队是由桌面应用程序(WinForms、WPF)开发人员组成的,一旦他们理解了 Blazor 或任何其他 SPA 框架所基于的组件模型,他们就会很容易地开始开发。
为什么使用 Blazor
您的开发人员非常熟悉 C#,但对 JavaScript 了解不多 JavaScript + SPA 框架的学习曲线,例如 Angular 比 Blazor 高得多,不管你是否了解 JavaScript。注意:这里必须强调的是,开发 Blazor 应用程序的能力需要一些学习投资,尽管不如 Angular 高,即使您是经验丰富的 Razor Pages 或 MVC 开发人员。 另请注意:C#(语言)知识,并不反映 (Asp).Net Core Framework 的知识。
共享库:这是使用 Blazor 的因素之一。在 Blazor 中,您可以创建可以在客户端和服务器上共享的项目。例如,您可以在共享项目中创建模型,并在双方都使用它。为什么使用 Blazor 服务器端
Blazor 服务器端最适合在专用网络中运行的企业应用程序。
所有资源都在您的掌控之中 您不必使用网络请求。您可以使用直接或通过存储库访问数据库的服务。 与公共服务器端 Blazor 不同,专用服务器端 Blazor(尤其是为您的公司使用的 Blazor)不太可能产生任何有意义的网络延迟(如果有的话)。您真的可以通过这种方式创建快速、强大且类似于桌面的应用程序
希望这会有所帮助...
注意:我没有完成我的答案,我会不时更新它。请不要犹豫,问任何你想问的问题。
【讨论】:
我不能依赖 Blazor,因为它还没有投入生产,也不确定社区将在多大程度上适应这项新技术。正如我所说,这是一个大型企业应用程序,不希望在一两年内获得不受支持的技术。 在仔细阅读 Blazor 之后,我更倾向于您的建议,而且 WebAssembly 也很有趣。我遇到的主要问题是我找不到 Blazor 的基本管理模板。我目前有一个 ASP .Net Core + Razor Pages 模板,它可以帮助我在 UI 方面节省大量时间。 Blazor 绝对是我所期待的,但它仍然没有稳定的版本,我建议不要在本身没有看到生产版本的平台上启动生产应用程序. ASP Net core v1、v1.1 是相当粗糙的版本,市场营销和文档看起来不错,但是当您进入实施细节时,缺乏功能开始受到伤害。我建议从 Razor Pages 开始,因为您可以稍后在 Blazor 稳定时直接将 C# 代码移植到 Blazor。 这是我决定采取的路线 - 从 Angular 我转移到 ASP .Net Core MVC - Razor 视图(因为它更容易转换为 Blazor)。将坚持开发 UI(更多地集中在业务层)直到 2020 年年中。到那时,如果 Blazor 稳定,将转移到 Blazor,否则将坚持使用 ASP .Net Core MVC。我在 Blazor 中看到的主要问题是延迟加载功能 -github.com/aspnet/AspNetCore/issues/5465。 听起来很谨慎。在这个问题上让我担心的一件事是,“但是,今天的 Blazor 完全拥有应用程序和 DOM,所以你不能真正使用 MVC 在服务器上呈现一些 HTML,然后使用 Blazor 在客户。”希望情况有所改变,因为其他所有前端框架都允许这样做。【参考方案2】:这是一个自以为是的问题,但一般来说,单页应用程序需要比服务器渲染页面大几个数量级的工作量。您将不得不在 C# 后端和 typescript 前端复制逻辑。当你用一种非类型安全的动态语言编写前端代码时,你将不得不处理大量的错误,这种语言的结构可以说是有问题的。最后,单页应用程序是值得的,因为如果操作得当,它们可以为最终用户提供丰富且引人入胜的体验。但要到达那里是一场艰苦的战斗。
考虑到您的开发人员的经验,我建议在 Razor Pages 或 MVC 中进行,并逐渐将一些 Angular/React 代码引入需要增强的前端区域。
换句话说,在 Razor Pages/MVC 中完成所有工作,选择一个小区域,分支中间件管道并提供一个小型 Angular 应用程序。
【讨论】:
如果您使用 Blazor,则没有重复的逻辑。您建议从 Razor Pages 开始,因为“以后可以在稳定后直接将 C# 代码移植到 Blazor”是错误的……尽管 Razor Pages 和 Razor Components (Blazor) 采用 Razor 语法并使用 C#,但它们是根本不同的东西,你真的不能直接从一个移植到另一个。在 Blazor 中编码要求您精通 Blazor 组件模型,这在经过长时间的学习后是可以实现的,尽管它的学习曲线比 Angular 的学习曲线要短。 不要评论我的 Isaac,我的回答与 Blazor 无关,我不知道我阅读了 Blazor 文档,事情看起来很相似。我正在查看 ComponentModel,它看起来与 React 几乎相同(可能接近 Vue,但它们都是相同的,只是略有不同)。将 Pages 移植到 Blazor 应该不成问题。这绝对比将 Angular 移植到 Blazor 更容易...... 我用“直接移植”这个词的意思是,“有些行可以复制和粘贴,因为它们都是 razor 语法”,并不是说你可以将 .cshtml 重命名为 .blazor 和摆脱它【参考方案3】:由于您的大部分应用都是简单的 CRUD,因此请考虑仅使用 razor/MVC。
使用 Visual Studio + ASP.NET core + EF Core 自动将数据库逆向工程为模型和数据库上下文。然后为所有 CRUD 操作自动生成(支架)控制器和视图。在需要的地方添加额外的数据注释。
如果您需要更高级的数据显示/交互(例如网格、日历等),请考虑使用 3rd-party Javascript 小部件。它们不需要 JavaScript 专业知识。
【讨论】:
【参考方案4】:取决于您的需求。您的公司充满了 C# 开发人员,因此使用 Angular 会增加项目的时间和复杂性。此外,由于这是一个用于在企业环境中输入数据的 Web 应用程序,因此您不必像在商业应用程序中那样关心加载时间和优化。一般尝试使用带有剃须刀的 ASP.NET Core 框架进行开发,并尝试使用较小的项目迁移到 Angular。这是我的看法。您希望提供适合您公司需求的技术解决方案并降低开发成本,这应该是您做出选择的主轴。
【讨论】:
【参考方案5】:对于企业开发人员,我认为我们更关注业务逻辑层,而不是像 SAP ABAP 开发那样 UI 是由框架或库生成的 UI 设计。无论前端还是后端,我都更喜欢使用强类型。它节省了大量时间并避免了拼写错误,尤其是团队开发。
例如,如下图的销售订单输入界面,我们只需要创建带有属性的模型并进行配置。该库将生成输入和搜索屏幕。
-
型号
-
输入画面
-
搜索配置
-
搜索屏幕
【讨论】:
那是什么图书馆? @VladimirPanchenko 它由我们的团队开发。它有助于最大程度地减少 UI 工作并且没有错误。 它是作为商业产品还是开源产品公开提供? 这是一个商业产品,公司提供咨询服务。这是演示link。您可以向公司发送电子邮件。【参考方案6】:我正在使用 Razor 构建一个 Core 3.1 Web.App。效果很好,生产力很高。我是一位经验丰富的 Javascript 开发人员,具有 Angular 经验。我最喜欢成熟的 Razor 环境。服务器上的身份验证很容易实现。如果您不需要 SPA 而需要 MPA,那么最好坚持使用 Razor。视图的加载对 MVC 来说不是问题,是的,它比 Angular 慢,但只要你保持视图紧凑就不会引起注意。
【讨论】:
以上是关于带有 Razor 页面的 ASP .Net Core 与 UI 的 Angular [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net core razor 页面中使用带有部分视图的 DI [重复]
带有 id 的 asp.net core 2 razor pages 路由
覆盖 asp.net core razor 页面中的 razor 视图