73

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

这里有一些背景:

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

我在这里阅读了出色的答案,并在此处观看了 Scott Allen 关于 Angular采访

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

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

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

4

3 回答 3

57

我的 2 美分值。

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

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

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

  • angular 是一个完整的框架 - 淘汰赛实际上只是 2 路绑定。您仍然需要其他库(如主干.js/jquery)来完成其余的工作。

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

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

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

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

于 2013-08-13T02:13:28.557 回答
21

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

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

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

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

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

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

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

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

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

于 2013-08-13T02:16:19.700 回答