将backbone.js与ASPNET MVC集成是否有意义?
我不是这些积木的专家,但乍一看,在我看来:
-
ASPNET MVC想要在服务器端生成视图并pipe理应用程序的模型。 它将浏览器视为一个有点笨的展示引擎,服务器为其提供的视图的消费者。
-
backbone.js想要在浏览器中生成视图和pipe理模型。 它将服务器端视为一个相当愚蠢的基于REST的持久性引擎。
这似乎是一个简单的观点。 我相信这不是整个故事。
整合这两件事情的真正机会是什么? 这样做有意义吗? 或者他们之间有太多的重叠,这是有道理的?
我喜欢看到这个分析或讨论,如果任何人都可以引用我。
虽然我不能和backbone.js交谈,但是我可以告诉你,我已经使用knockout与ASP.NET MVC结合起来了。 我所见过的每个ASP.NET应用程序都使用了客户端和服务器端视图生成的组合。 总会有一些时候更方便的在服务器端生成视图。 以条件UI元素为例,根据用户是否被authentication,或者他们是否具有特定的权限。 您可能不希望精通networking的用户能够探索您的客户端模板,并计算出他们没有得到的所有function。 当然,你可以通过asynchronous加载不同的客户端模板来解决这个问题,等等,或者结束编写服务器端代码来生成客户端模板…此外,如果SEO意味着什么给你,你可以吻客户端模板(本身)再见。
所以在我看来,这个甜蜜的地方就是两个不错的东西。 根据我的经验,我发现ASP.NET MVC在两方面都很出色。
为什么ASP.NET MVC是真棒
- 布局(MasterPages)
- 剃刀(types安全意见与intellisense善良)
- ActionFilters(适用于日志logging,身份validation等惯例的真棒点)
- JSON序列化免费
return Json(model)
- 模型绑定和validation
- IoC和MVC是最好的朋友(胜利)
- authentication+授权
- 很多其他的东西,我想不出来。
通过使用客户端框架进行视图生成,所有你错过的就是Razor。 你甚至可以在一定程度上利用布局。
我使用ASP.NET MVC进行开发的方法是先使应用程序工作在服务器端。 这迫使你想想你想要你的URL结构,什么值得一个控制器,你的路线应该是什么。 这也意味着在第一次迭代视图中,您将获得types安全性和自动完成的好处。 在这个练习的最后,你会得到一个简单的,符合标准的解决scheme(希望是)可以在任何人都知道的设备上工作,Google无法获得足够的。
然后,我开始采取增量方法来实现客户端function的切片。 在客户端,我写了一些JavaScript来劫持一个请求,我想变成一个AJAX请求,并使用翻译版本的Razor视图来处理响应。 在服务器端,我使用一个基于约定的方法使用动作filter。 这个动作filter大致如下:
- ActionResult是一个ViewResult吗?
- 什么是接受types?
- HTML – 返回给定相同模型的名称前缀为“_”的PartialViewResult
- JSON – 返回给定相同模型的JsonResult
- 什么是接受types?
- ActionResult是一个RedirectToRoute结果吗?
- 返回EmptyResult(或者可以select返回JsonResult中的URL)
使用这种方法,您可以添加AJAXfunction,而无需更改控制器中的单行代码。 另一种方法是遵循Thunderdome Principal,并有一个ActionInvoker负责根据请求上下文将模型包装成适当的结果types。 我还没有弄清楚如何服务器端导航(redirect)适合这种方法。
从服务器端实现开始,浪费在视图生成代码(Razor +基于js的模板)上。 根据你想要在客户端实现多less应用程序,这可能是也可能不是问题。 Spark是这个例外,因为你实际上可以让它为你生成客户端模板 ! Spark的缺点是你失去了intellisense(有一个插件,但它的废话),这不是一个微不足道的损失,加上我只是喜欢剃刀(它的烘烤,不需要configuration,并且不会随时消失不久)。
我已经对不同的项目使用了asp.net mvc KO和bakcbone,最终都归结为项目的性质。 一旦工作stream程开始变得复杂,或者您将提供与简单数据数据中心应用程序不同的UX,服务器堆栈将不会出现。 当你的项目涉及到伟大的用户体验,骨干网可以让你在那里..缺点是,没有明确的集中指导方针,你将不得不经过地狱的博客才能完成任务。对于传统的应用程序,你可以坚持到KO。 顺便说一句,有插件,可以嘲笑KO的backbonejs ..我指bacjbone.modelbinder再次你需要为你自己集成Cuz MS不会打扰一切。