Asp.net mvc ASP.NET MVC与淘汰和Web API:有意义吗?

Asp.net mvc ASP.NET MVC与淘汰和Web API:有意义吗?,asp.net-mvc,knockout.js,Asp.net Mvc,Knockout.js,将KnockoutJS Viewmodels与ASP.NET MVC3或4结合使用有意义吗?因为天气不太干燥,不是吗?我必须为EF编写模型,为MVC视图编写Viewmodels,为淘汰赛编写Viewmodels。。。我失去了很多魔法。例如,自动客户端验证 如果坚持使用MVVM模式,使用MVC有意义吗?使用,您可以从MVC视图模型自动生成KO视图模型 这是一个合适的模式:您的模型是原始实体,您的数据。您的视图就是UI。视图模型是适应特定视图的模型。我们使用敲除映射来生成KO视图模型 我们在一个单独

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

如果坚持使用MVVM模式,使用MVC有意义吗?

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


这是一个合适的模式:您的模型是原始实体,您的数据。您的视图就是UI。视图模型是适应特定视图的模型。

我们使用敲除映射来生成KO视图模型

我们在一个单独的项目中有一个业务层,它执行CRUD、报告、缓存和一些额外的“业务逻辑”。我们不会使用EF或类似的东西。目前,我们已经将c#类定义为MVC模型,我们的控制器调用业务层来构建在MVC应用程序中通常位置定义的模型。这些C#模型被序列化为JSON,以便在我们的页面中使用

由于我们在浏览器中所做的一切都是基于c#/JSON的,使用敲除,因此我们没有以传统的MVC方式使用MVC模型-所有内容都以JSON形式发布并序列化到c#,因此我们不使用MVC模型绑定、验证、,等等。我们正在考虑将这些模型移动到我们的业务层,以便能够独立于web应用程序进行测试

Se我们只剩下一个MVC应用程序,它有控制器和视图,但没有模型——控制器将获得在业务层定义的模型。我们担心脱离常规的MVC结构,但是基于KO/javascript的客户机与MVC最初构建的基于DOM的客户机有根本的不同


这听起来像是一种可行的方式吗

这可能是一个不受欢迎的答案,但我不会使用
ko.mapping
将我的C#poco转换为JS viewmodels。有两个原因,真的

首先是缺乏控制。如果你允许的话,映射将把一切都变成可观察的。这会给不需要观察的字段带来大量开销

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

在上一个项目中,我实际上以编程方式向ko.mapped对象添加了额外的方法。在这一点上,我质疑ko.mapping是否真的制造了比它解决的问题更多的问题

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

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

Javascript视图模型也是如此。他们不是C#poco。它们是对适合特定目的的概念的具体理解;保存和操作客户端数据。虽然
ko.mapping
一开始会给您带来生产率提升,但我认为最好是手工制作为客户设计的特定视图模型


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

我现在正在进行一个混合了MVC3和knockouts的项目,我必须告诉你——这是一个混乱。。。
在我看来,强迫某些模式跟上潮流是毫无意义的。

这是一个老话题,但在2014年(不幸的是),我仍然觉得这个问题有着巨大的相关性

我目前正在做一个混合MVC4和knockoutjs的项目。我很难找到哪一部分应该在哪一边处理。此外,我们还需要一种“SPA-ish”式的体系结构,其中每个模块都有自己的页面,但在该模块内部只有AJAX交互。还面临一些繁重的验证场景,需要在每个模块内提供用户(和SEO)友好的URL。我最终提出了以下概念,似乎效果不错:

基本MVC和.NET端角色:

  • 处理身份验证和其他安全内容
  • 为客户端调用实现Web API接口(设置视图模型、从域检索和映射数据等)
  • 使用T4模板从我的(预先存在的)C#viewmodels生成淘汰视图模型,还包括来自.NET验证属性的淘汰验证插件扩展。(这一点受到了他的启发)。生成的viewmodels易于扩展,并且可以使用几个“数据注释”对生成进行微调,如自定义或内置属性(如DefaultValue、Browsable、DataType、DisplayFormat等)。这样就不会违反干洗法(太多)
  • 为每个子模块(每个淘汰视图模型)提供强类型,但数据独立的部分视图模板。因为C#viewmodels上的属性名与KO模型中的属性名相同,所以我可以从专门为KO绑定等编写的强类型帮助程序中获益
  • 提供每个模块的主视图与前一点类似
  • 捆绑和缩小所有脚本和样式表
基本客户端角色:

  • 加载所有的初始状态