Angular.js and ASP.NET MVC 4

Angular.js and ASP.NET MVC 4

本文关键字:MVC NET ASP js and Angular      更新时间:2023-09-26

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

以下是一些背景:

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

我已经阅读了这里的优秀答案,并观看了Scott Allen关于Angular here 的采访

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

我不想讨论Angular和Knockout的"哪个更好",因为我认为它们都有优缺点。我正在寻找在ASP.NET MVC 4应用程序中实现JavaScript框架或库的实际代码。我需要一个解决方案,从现在起两年多的时间我都可以使用:)

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

我的2美分价值。

序言-我既有棱角分明的作品,也有击倒对手的作品。我正在使用MVVM/MVC库构建第三个非琐碎的前端。

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

然而,这些天我使用angular,可能会坚持使用它,原因如下。

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

  • angular具有依赖性注入。非常适合添加
    对测试进行嘲讽,并为代码提供结构。

  • angular将普通JS变量视为其$范围内的可观测变量对象这意味着你不必以特殊的方式申报

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

angular最大的问题是文档。与淘汰赛相比,这是可悲的。这将增加额外的时间和成本,使您的编码器加快速度。然而,一旦他们到了那里,这是IMHO目前的最佳选择。

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

我确实使用了AngularJS和ASP.NET MVC 4,很高兴我做到了。尽管Angular有一条陡峭的学习曲线,但由于指令的强大,它是值得的。

  • 我们需要双向模型数据绑定——有时我需要设置一些来自MVC控制器的初始值。我使用了ng-init属性来实现这一点
  • 我们需要测试视图的能力-我遵循了AngularJS文档进行测试
  • "保存更改"功能-我使用Angular中的指令实现了这一功能
  • "通知"功能-我使用toastr.js和and指令(schweet)实现了这一功能
  • 我们需要"经得起未来考验"我们的应用程序-我不知道谷歌对AngularJS的计划,但在与AngularJS合作后,我认为它不会很快出现,并希望它能被更广泛地采用:)

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

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

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

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

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

我们正在构建一个相当大的ASP.NetMVC网站,使用Durandal和Knockout,再加上一个额外的门面,从开发的角度来看,这是一个很好的整合。我不建议尝试使用服务器端淘汰的东西;我只是发现这限制了MVVM模式的真正威力。