带有 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 视图

布局 ASP.NET Razor 页面中的模态

示例 AJAX 回调到 ASP.NET Core Razor 页面

在 ASP.Net Core Razor 页面中添加 Toast