使用Knockout和Web API的ASP.NET MVC:它有意义吗?

Mat*_*lin 18 asp.net-mvc knockout.js

将KnockoutJS Viewmodels与ASP.NET MVC3或4结合使用是否有意义?因为它不是很干,不是吗?我必须为EF编写模型,为MVC视图编写Viewmodels,为Knockout编写Viewmodels ......我失去了很多魔法.例如,自动客户端验证.

如果坚持使用MVVM模式,那么使用MVC是否有意义?

Jud*_*ngo 15

使用Knockout Mapping,您可以从MVC视图模型自动生成KO视图模型.

这是一个合适的模式:您的模型是原始实体,您的数据.您的观点是用户界面.您的视图模型是适合该特定视图的模型.

  • 这很有道理,这是我使用的方法.MVC4随附Knockout,我希望有一些模板可以使用Knockout绑定(特别是使用新的SPI东西) (3认同)

Pau*_*lor 7

这可能是一个不受欢迎的答案,但我不会ko.mapping将我的C#POCO翻译成JS视图模型.真的有两个原因.

首先是缺乏控制.如果你愿意,ko.mapping会把所有东西变成一个可观察的东西.对于不需要观察的字段,这可能会导致很多开销.

第二个原因是关于可扩展性.当然,ko.mapping可以将我的C#POCOS转换为具有可观察属性的JS对象.这很好,直到你想要一个JS方法,在某些时候,你总是会.

在之前的项目中,我实际上是以编程方式为ko.mapped对象添加额外的方法.那时,我质疑ko.mapping是否真的创造了比它解决的更多问题.

我接受了您对DRY的担忧,但是,无论如何,我的POCO版本都有不同的以域名为中心的版本.例如MyProject.Users.User,UserController 提供的对象可能与a非常不同MyProject.Articles.User.Users命名空间中的用户可能包含许多与用户管理相关的内容.Articles命名空间中的User对象可能只是一个简单的查找,以指示文章的作者.我认为这种方法不违反DRY原则; 而是以两种不同的方式看待相同概念的手段.

这是更多的前期工作,但这意味着我有特定于问题的用户表示,不会污染彼此的实现.

所以它是Javascript视图模型.它们不是C#POCO.它们是针对特定目的的概念的具体考虑; 持有和操作客户端数据.虽然ko.mapping最初会给你带来生产力的提升,但我认为手工制作为客户设计的特定视图模型会更好.

顺便说一句,我使用与你自己完全相同的MVC3/KnockoutJS策略.