ASP.NET MVC(Razor)与Angular 5的比较

12

我们正在考虑从ASP.NET MVC迁移至Angular 5,主要是因为它似乎是最好的和最新的框架。然而,我们中没有人能够提出硬性理由说明为什么Angular优于MVC(Razor)。

SPA与MPA似乎是不同的方法,并没有哪种方法真正更好 - 只是在不同的事情上表现更好。

是否有任何资源或比较指出两者之间的硬性好处?

更新:迁移到Angular 4(目前为7)近两年后,我可以说这是个好决定。Angular使编写相当复杂的前端应用程序变得非常容易,并且围绕Angular本身的工具,TypeScript,Karma + Jasmine(单元测试框架)都很棒。我的意见是SPA比MPA更先进 - 我们终于可以拥有流畅的Web体验。我从来没有真正喜欢过Razor以及与ajax / jquery相关的混乱,但我现在可以自信地说我非常享受这段时间! .NET CORE 3 + Angular 7给了我们我们需要的一切!

对于任何想要尝试的人,我强烈推荐使用Angular(也许可以直接从当前的版本8或9开始)。

如果需要,我很乐意提供更多细节 :)


2
可能是ASP.NET MVC Razor视图与AngularJS的重复问题。 - Ramesh Rajendran
有点是这样。每当我看到这样的问题时,答案似乎都很主观,很难为其中之一提出论据。SPA相比MPA似乎更好的用户体验,但除此之外,很难说哪个更好。我很想转向Angular,因为它看起来更好,并且许多公司正在朝着这个方向发展。如果有人问我为什么,我无法给出明确的答案。 - Ross
3
Razor只是一个视图引擎,如果需要的话你可以替换它。Angular是一个JavaScript框架,你可以在Razor之上使用Angular,不需要在两者之间做出选择。最终,这取决于a)你的规格要求和b)你的预算允许什么。 - Marco
1
我们同时使用了两者,并从纯 .NET MVC 转换到了 Angular + Web API。 需要记住的一件事是,如果你已经有 C# (MVC) 的背景,那么学习 Angular 将会有一个陡峭的学习曲线。再加上 RxJS,学习曲线会更陡峭。并且根据你对 JS 的了解程度,C# 和 JS 也存在着差异,你需要学习这些差异。 - Arikael
2
只是添砖加瓦:使用单页应用程序(SPA)通常会使用轻量级API,因此您的服务器的工作量更小,因为它不必渲染HTML,从而使用的带宽更少。 - Artur Kedzior
显示剩余7条评论
5个回答

4
我建议在云中使用ASP.Net MVC Web应用程序,使用Razor页面如有需要。就这样,问题解决了。即使全世界都在追求Angular、Aurelia、React、Node、Strawberry、Pistachio、butterScotch JS,我也不会跟进。毕竟,JavaScript是一种混乱的语言,而Angular则是飞碟怪兽,这是基于个人经验和直觉得出的结论。现在,请不要开始谈论鼠标悬停在页面区域上。

10
这更像是一篇抱怨而不是一个答案。 - Codebling
我理解你的沮丧。就个人而言,我更喜欢使用Razor来控制我的HTML输出。这完全取决于实际应用和架构。 - Yasser Jarouf
1
也许这是在发牢骚,但我喜欢飞行意大利面怪物的说法 :-)。顺便说一下,Javascript不再是 Spagetti 了。它有类。把所有东西都放在那些类里面,你就会没问题了 :-) - Herman Van Der Blom

4

我没有足够的积分来发表评论,但我认为以下内容可能会帮助您做出决定。

请注意,如果您使用Angular CLI(Visual Studio中的默认Angular项目),则将失去在HTML中使用razor的能力。这是之前可以做到的。

我喜欢使用Angular,但我想念使用Razor来省略HTML的某些部分,例如,如果用户没有必要的角色或权限:

@if(User.IsInRole("Admin"))
{

}

当然,你可以使用Angular来隐藏HTML,但在我看来,完全从HTML本身中删除它是更可取的。


好的观点。我们没有使用 .Net Angular 项目模板,因为我们发现它很令人困惑和不必要地复杂。我们将这两个项目完全分开,并将它们放在不同的文件夹中,这样更容易跟踪变化等。我确实同意 Razor 中这种功能很好,而在 Angular 中需要做更多的工作。最终 - 用户角色检查/保护最终在 API 中完成,API 应该是判断用户可以做什么和不能做什么的最终裁决者。 - Ross
当然,Ross,检查服务器端的安全/权限绝对是必须的。我没有足够的积分在您下面的最终答案中发表评论,但认为您可能会对我们喜欢使用的以下工具感兴趣,称为Typewriter。我们喜欢使用它来自动生成我们在Angular中使用的Typescript dtos。这些dtos基于我们的c#模型。非常方便,节省了很多时间。https://marketplace.visualstudio.com/items?itemName=frhagn.Typewriter - Andrew

3

从ASP.NET MVC迁移到Angular 5(现在是6)已经有了6个月时间,我们对这个决定非常满意。.NET Core后端和Angular前端是一个非常好的组合。它更加清晰、易于创建可重用的、强类型、易于测试和修改的UI组件!

对于任何考虑是否值得尝试的人,我会毫不犹豫地说“是的”!


现在已经过去一年了,你对这个决定仍然感到满意吗?我们正在考虑做出与你一年前相同的决定。 - Stinky Towel
1
是的 - 对这个转变感到非常高兴。比6个月前更加满意。Angular 6+ 真是太好了。Dotnet core + Angular 2+ 是一个绝妙的组合! - Ross

3
我对 Angular 和 MVC(Razor)有一些了解,我可以使用两者。其中一个需要注意的事情是不要有复杂的授权方案。在 Razor 上进行授权更加容易,特别是与 Core 结合使用时。使用 Angular 处理授权较为困难,因为你必须在客户端和服务器端都进行授权,并保持同步。例如:你只想显示用户有权查看的内容,如果你有一个简单的网站并使用 Masterpage,则仅显示用户允许查看的菜单项,在 Razor 中执行此任务非常容易。但在 Angular 中实现此功能需要更多时间和精力。
Razor 极易与模板配合使用。如果你要开发一个需要多次使用但具有不同布局的网站,使用 Razor 可以轻松实现。
使用 MVC,前端和后端属于同一个应用程序。而使用 Angular,前端和后端需要分开处理,这看起来从安装、维护等方面来说更加昂贵。如果你拥有一个简单的应用程序,我会建议你保持简单(KISS:保持简单,愚蠢)。
MVC 中的前端和后端是相互关联的,这既可以是优点也可以是缺点。如果你有一个没有依赖其他东西的应用程序,那么我认为 MVC 是一个不错的选择。
Angular 不是 W3C 标准并且没有被内置到浏览器中,因此它不能保证未来的兼容性。为了实现未来的兼容性,人们越来越倾向于使用原生 Javascript 与 Web 组件相结合的技术。MVC 可以使用这种技术。阅读有关 Microsoft FAST Design 的文章,可以更好地了解如何将其与 MVC 结合使用。
SPA/MPA 已经不再是一个问题。使用像 PJAX 等库,MPA 也可以实现无闪烁页面。
使用 MVC 没有等待时间,因为所有内容都是直接加载的。已经有足够多的 Angular 网站存在,因为加载需要很长时间。
在使用 Angular 9 后,我还不明白为什么要从 MVC 转向 Angular。Visual Studio 对 MVC 的支持非常好,并且比 VS Code 更好。从生产力的角度来看,我可以用 MVC 比用 Angular 更快地编写代码。如果你有多个前端需要连接同一个后端,那么可能会转向 Angular。但即使如此,MVC 也可以被模块化,甚至可以动态加载它们。
htmx 是个好东西!让 HTML 控制页面的加载方式是正确的方法。我们正在使用 NodeJS 进行样本工作,并对此感到非常兴奋。
更新:我刚刚完成了一个使用nodejs/express/mongodb的项目,它比所有其他技术都要好。我是一名专家级的MVC开发者,但在价格仅为220美元的Chromebook上使用VS Code能够更快、更好地开发。现在我知道为什么它这么受欢迎了。你猜怎么着?它是免费的!还有你知道吗?.NET Core的一部分基于nodejs。控制台应用程序与nodejs服务器相同。然而,你需要将它们放在IIS、Apache或NGINX代理后面。

2
在比较MVC和Angular时,我学到了一件事情,即托管MVC应用程序需要像Azure Web App、Docker等计算能力容器,而Angular应用程序可以部署在任何存储介质中,如Blob、CDN等。当Angular构建完成后,它会生成一组JavaScript文件,这些文件非常适合用作存储容器。它们根本不需要计算能力,这是云世界中最昂贵的资源。CDN或Blob将其底层资源暴露为Rest API端点。因此,Angular也将作为API公开,这是我们想要的。

然而,仅凭Angular无法生成动态Web页面。我们需要后端的Web-API来提供数据。这可以通过无服务器解决方案(Function Apps、Logic Apps等)或容器化(Docker)来实现。

我个人发现Angular第一次加载页面有点慢,但之后就非常流畅。

总的来说,在未来的Web项目中,我将投票支持Angular/React和.Net Core。


非常好的观点!谢谢分享! - Ross
你把事情搞混了。Angular是客户端,MVC是客户端和服务器。Angular也有很多负面因素。如果你不需要WebAPI等,那该怎么办? - Herman Van Der Blom
如果不需要WebAPI,则网页更有可能是静态的。即使如此,Angular/React应该比MVC更好。客户端渲染与服务器端渲染。前者总是更快的。 - Prem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接