【问题标题】:Angular.js and ASP.NET MVC 4 [closed]Angular.js 和 ASP.NET MVC 4 [关闭]
【发布时间】:2013-08-14 11:36:35
【问题描述】:

我有一个 ASP.NET MVC 4 项目,但在架构决定上纠结于使用 Angular.js 或 Knock.js 的 JavaScript 框架或库。我目前倾向于使用 Angular.js 而不是 Knockout.js,但不想在项目开发过程中发现我犯了一个错误。

这里有一些背景:

  • 我们需要双向模型数据绑定
  • 我们需要测试视图的能力。我希望能够进行端到端的单元测试。此外,我们正在使用持续集成。
  • “保存更改”功能。即,如果用户在页面上进行更改,我们需要能够检测任何更改并提示用户在离开页面之前保存更改
  • “通知”功能。即用户将登录大约 8 小时,并且需要通知和更新其他用户所做的更改(错误、数据状态更改等)
  • 我们需要“未来证明”我们的应用程序。目前业务部门尚未决定是否需要支持移动设备,但我知道这只是时间问题。
  • 我们的团队由具有不同经验水平的开发人员组成,从初级开发人员到高级开发人员。
  • 目前我们的模型很复杂,可能会变得更复杂
  • 我们还需要考虑 RAD、代码重用和可维护性

我已经阅读了出色的答案here 并观看了 Scott Allen 关于 Angular 的采访here

由于我们无法从当前的 ASP.NET MVC 4 架构更改为在服务器端使用 Web API 之类的东西,所以我有一些 concerns 在尝试使用 MVC 4 实现 Angular.js。这会导致我们有两种模型,一种在服务器上,一种在客户端上?

我不是在寻找关于 Angular 和 Knockout 的“哪个更好”的讨论,因为我认为它们各有利弊。我正在寻找在 ASP.NET MVC 4 应用程序中实现 JavaScript 框架或库的实际代码。我需要一个可以忍受 2 年以上的解决方案 :)

有什么想法或建议吗?也许答案不是 Knock 或 Angular,而是其他一些 JavaScript 框架?

【问题讨论】:

  • 我很好奇为什么在使用 ASP.NET MVC 时需要这两种方法?为什么不将 ASP.NET 的视图与 Razor 一起使用,并进行 ajax 调用和 jquery 来操作您的 DOM?

标签: asp.net-mvc-4 angularjs knockout.js javascript javascript-framework


【解决方案1】:

我的 2 美分值。

序言 - 我曾使用过角度和淘汰赛。 我正在使用 MVVM/MVC 库构建我的第三个非平凡前端。

我从淘汰赛开始,因为它的 MVVM 与 wpf/silverlight 机制非常相似。而且效果很好。教程和文档是一流的。您的所有编码人员都可以在几天内使用 knockout.js,或者如果他们在 .net 下使用过 mvvm,则可以在几小时内使用。

但是,这些天我正在使用 angular,并且可能会因为以下原因而坚持使用它。

  • angular 是一个完整的框架 - 淘汰赛实际上只是 2 方式绑定。您仍然需要其他库,例如主干.js/jquery 完成剩下的工作。

  • angular 有依赖注入。非常适合添加
    模拟测试以及为您的代码提供结构。

  • angular 将普通 JS 变量视为其 $scope 内的可观察对象 目的。这意味着您不必以特殊方式声明它们

我不是一个狂热的粉丝,我仍然认为他们可以更多地转向 MVVM 架构,而不是他们目前拥有的“时髦”的 MVVM/MVC 混合架构。

Angular 最大的问题是文档。与淘汰赛相比,这是可悲的。这将增加额外的时间和成本来让你的编码器跟上速度。然而,一旦他们在那里,它目前是恕我直言的最佳选择。

【讨论】:

    【解决方案2】:

    很高兴看到这个问题引起了社区的兴趣;)为了完整起见,这就是我最终所做的:

    我确实使用了 AngularJS 和 ASP.NET MVC 4,并且很高兴我这样做了。尽管 Angular 有一个陡峭的学习曲线,但由于指令的力量,它是值得的。

    • 我们需要双向模型数据绑定 - 有时我需要设置一些来自 MVC 控制器的初始值。我使用 ng-init 属性来完成此操作。
    • 我们需要测试视图的能力 - 我按照AngularJS docs 进行测试
    • “保存更改”功能 - 我使用 Angular 中的指令实现了此功能
    • “通知”功能 - 我使用 toastr.js 和指令 (schweet) 实现了这个
    • 我们需要“证明”我们的应用程序 - 我不知道 Google 对 AngularJS 的计划,但在使用 AngularJS 之后,我看不到它会很快发展到任何地方,并希望它得到更广泛的采用 :) 李>

    【讨论】:

    • 只需我的 2 美分:AngularJS 是开源的,所以 Google 的计划是什么并不重要。这都是关于社区现在想要什么:)
    【解决方案3】:

    我没有太多关于 AngularJs 的意见,但想提供一些关于 Knockout 的想法。

    Knockout 主要是一个将视图连接到视图模型的数据绑定库,但除此之外并没有真正提供很多功能。我不建议单独使用 Knockout 作为主库来构建基于客户端的复杂网站。

    您没有提到您是在实现类似 spa 的功能(即标签导航)还是主要使用 MVC 服务器端视图(例如 Razor)。如果您只是在寻找每页级别的快速数据绑定,我什至会重新考虑这一点。对我来说,这两种方法(角度或淘汰)都是为了增强客户端开发体验而设计的,而不是像 MVC 这样的服务器端方法。

    如果您正在考虑使用 SPA 方法,即使是部分考虑,您也可能需要一些框架来提供对视图激活生命周期的某种程度的控制。

    就数据绑定能力和可靠性而言,我相信 Knockout。我一直在广泛使用它,并且非常喜欢它。如果你喜欢淘汰赛的感觉,你可能想看看Durandal。 Durandal 是一个体面的框架,能够满足许多“spa”网络项目的需求。它是建立在几个经过验证的库之上的客户端框架,包括 Knockout。它比 Angular 轻一点(很多),并且可能更易于用户使用。

    我们正在构建一个相当大的 ASP.Net MVC 网站,它使用带有 Knockout 的 Durandal 以及一个额外的外观来从开发的角度收紧工作,并且与 ASP.Net MVC 的集成是直截了当的。我不建议尝试使用现有的服务器端淘汰赛。我只是发现这限制了 MVVM 模式的真正威力。

    【讨论】:

    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2016-10-15
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多