【问题标题】:Moving from traditional ASP. NET MVC to WebApi + Knockout从传统的 ASP 转移。 NET MVC 到 WebApi + 淘汰赛
【发布时间】:2012-07-13 16:01:02
【问题描述】:

我刚刚阅读了一篇有趣的文章,关于 Microsoft 似乎正在向 REST 接口 + 客户端基于 javascript 的 Web 应用程序 MVVM 开发迈进。

虽然我在技术上理解这两种模型之间的基本区别,但我完全不知道它对我如何编写 Web 应用程序以及最重要的是如何优雅地过渡到这个新模型的影响。

因此,对于从传统 ASP.NET MVC 迁移到 WebApi + KO 的人来说,会出现以下问题:

  • 有没有办法使用 MVC + KO 进行不显眼或几乎不显眼(即最少代码)的验证?
  • 如何对他的 UI 代码进行单元测试?
  • KO 是否会影响浏览器兼容性?
  • 从一种模型转移到另一种模型时,是否还有其他需要考虑的事项?

【问题讨论】:

  • 现在有点困惑:.NET MVC 和 WebAPI 不是有不同的用途吗?我的意思是,MVC 用于 webapps 和网站,而 WebAPI 用于 API(和服务等)。那么,为什么有人会从 MVC 迁移到 API?我错过了什么?
  • 这不一定是真的。这只是一种不同的做事方式。您可以拥有可供任何客户端使用的 Web API - 包括但不限于您自己的网站!
  • 但是,在这种情况下,您仍然需要一个网站作为前端,对吧?也就是说,WebAPI 项目将充当服务层,我明白了。
  • @AndreCalil WebApi 也没有理由不能用于创建网站。 HTML 只是另一种媒体类型。
  • 关于浏览器兼容性,我(最近)遇到的唯一问题,希望这里有人可以提出建议是这样的:stackoverflow.com/questions/11442919/… - 否则我发现 Knockout 是可预测的、健壮的和一般的太棒了。

标签: c# asp.net-mvc-3 knockout.js asp.net-mvc-4 asp.net-web-api


【解决方案1】:

您看到 Microsoft 开始推动这种“单页 Web 应用程序”,部分原因是它可以提供更好的用户体验,但主要是因为它可以更轻松地将您的 Web 应用程序迁移为 Windows 8 原生应用程序。

Re:用于验证的不显眼的 javascript... 我想说,如果您使用 Knockout,那么您的 UI 和您的脚本将如此紧密地耦合,即使只是对于基本的东西,不显眼真的不是一个有效的目标。您可以在 Knockout 中进行验证(例如,参见 https://github.com/ericmbarnard/Knockout-Validation#readme),但它与 ASP.NET MVC 的定义相同

Re:单元测试...看看https://stackoverflow.com/questions/6331789/knockoutjs-unit-testing-with-qunit

Re:浏览器兼容性...我不知道与任何现代浏览器有任何兼容性问题,除非您有禁用 JavaScript 的疯狂用户

【讨论】:

    【解决方案2】:

    我发现this 是一个很好的讨论,讨论了尝试在 Knockout 网站上“不引人注目”的利弊。

    传统上,我非常赞成让 Javascript 尽可能不引人注目,并且通过我的 Knockout 表达式,我尝试通过将任何繁重的工作转移到我的视图模型上的函数并创建自定义绑定来尽可能地保持它们的最小和整洁它封装了 DOM 逻辑 - 但我坚信声明性方法本身(例如使用 data-bind 属性的默认值)在合理使用时是可行的方法。

    可能是因为我对 Knockout 的介绍是我工作过的 WPF 应用程序的 Web 应用程序“端口”,当我了解更多有关如何优雅地利用 Knockout 的信息时,我的网站的 Knockout 绑定变得惊人地接近它们的 XAML 等效项.我只是喜欢能够用眼球标记并一目了然地看到关于如何评估视图的真实业务逻辑,而不是 jQuery 或任何物理构建它以响应一些点击事件的细节,这些点击事件连接在一个破坏 Javascript 的大灵魂中文件。

    当我重新访问我的一些传统 MVC 站点时,这些站点利用大量程序 jQuery 来连接事物,我认为,是的,标记很整洁,但是 6 个月后回到它,即使我很难理解我的意图是什么所有这些 jQuery 选择器、回调和 DOM 遍历。我认为我只会在必要时动态应用 Knockout 绑定本身,即如果存在我的绑定逻辑本身是动态的情况 - 但无论如何使用动态模板可能会以不同的方式完成。

    这是我对您问题的不引人注目的方面的 2 美分,如果您在过去几个月中迁移到 MVVM Javascript 的经历与我一样,那么您将不会回头。

    【讨论】:

    • 很好的答案,谢谢!您能否详细说明您从 KO 最佳实践中学到的东西?
    • 我只使用 Knockout 几个月,所以我最好不要过多地宣称“最佳实践”,但我确实学到了很多东西,并且一直在改进我的模式不断的使用。我最近添加了很多 Knockout 答案/问题/励志咆哮,这可能会对您有所帮助,否则请随时通过我的网站给我发电子邮件。干杯。
    • @TomHall:很高兴了解您的经历!如果您可以发布任何资源,其中包含有关如何使用该组技术(knockout.js + ASP.NET Web API)执行典型实体 CRUD 功能的示例,那将会非常有用!非常感谢
    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2015-05-24
    • 1970-01-01
    相关资源
    最近更新 更多