Ajax架构 - MVC?其他?

the*_*ott 5 javascript architecture model-view-controller jquery

嘿所有,我正在寻找建立一个ajax重型网站,我正在尝试花一些时间在架构上进行前期思考.

我正在使用Code Igniter和jquery.我最初的思考过程是弄清楚如何在javascript端复制MVC,但似乎M和C并没有真正有很多地方.

很多JS都是ajax调用但是我可以看到它不断增长,有大量的DOM操作,以及探索HTML5客户端数据库.我应该如何考虑构建这些文件?追求MVC是否有意义?我应该以某种方式进入jquery插件路由吗?我迷失了如何继续,我会喜欢一些提示.谢谢大家!

Bre*_*ton 9

我做了一个MVC风格的Javascript程序.完成M和C.也许我做了一个错误的举动,但我最终创作了自己的事件调度程序库.我确保不同的层只使用可以转换为纯JSON对象的消息协议进行通信(即使我实际上没有执行该转换步骤).

所以jquery主要生活在MVC架构的V部分.在M和C方面,我主要有代码可以在独立的CLI版本的spidermonkey中运行,或者在javascript的服务器端rhino实现中运行,如果需要的话.通过这种方式,如果需求稍后更改,我可以在服务器端运行我的M和C层,通过这些json消息与浏览器中的V端进行通信.它只需要对我的消息调度程序进行一些修改就可以改变它.在未来,如果浏览器获得一些点对点风格的技术,我可以让不同的teirs在不同的浏览器中运行.

但是,目前,所有三个层都在一个浏览器中运行.我创作的事件调度程序允许多播消息,因此现在实现撤消功能就像创建一个简单地监听需要撤消的消息的新对象一样简单.将状态自动保存到服务器是一种类似的操作.我能够在事件调度程序中进行全面详细的调试和分析.我能够准确地定义代码的运行方式,以及代码中心位的快速,时间和地点.

当然,我遇到的主要缺点是我没有很好地管理事物的复杂性.为此,如果我完成所有工作,我会非常仔细地研究"功能反应"范式.在javascript中有一个名为flapjax的范例的现有实现.如果没有特别使用flapjax库,我会确保视图层遵循该执行模型.(我不确定flapjax本身是如此伟大的想法执行,但这个想法本身很重要).

功能反应的另一个重要实现是石英作曲家,它随苹果的开发者工具免费提供(购买任何mac都是免费的).如果您可以使用它,请仔细查看它以及它是如何工作的.(它甚至还有一个javascript补丁,因此您可以使用预构建的视图层对应用程序进行原型设计)

功能反应范式的主要内容是确保视图看起来不会保持任何类型的状态,除了您刚刚显示的视图.换句话说,我开始用"向屏幕添加一个对象""从屏幕上删除一个对象"类型的消息,我现在更倾向于"显示这个对象列表,我会让你找出从当前显示器到我现在想要你显示的最有效的方式".这消除了与陷阱管理状态有关的一大堆错误.

这也解决了我遇到的另一个问题,即由于邮件以错误的顺序到达而导致的错误.这是一个很难解决的问题,但你可以通过向一个大包发送最终所需的状态而不是一系列步骤来回避它.

无论如何,那是我的小咆哮.如果您对我的战时经历有任何其他疑问,请与我们联系.


mwi*_*cox 6

冒着被焚烧的风险,我会建议除了JQuery之外的另一个框架,否则你将冒险达到其性能上限.它的ala模式插件在尝试将M,V和C分开时也会出现一些问题.

Dojo以其数据存储而闻名,它用于使用不同的传输协议绑定到服务器端数据,以及面向对象的照明快速窗口小部件系统,可以轻松扩展和自定义.它有一种风格可以帮助引导您进入干净,分割良好的代码 - 尽管它不是严格意义上的MVC.这需要一些额外的计划.

然而,Dojo的学习曲线比JQuery更陡峭.

更多问题,持有和查询此数据的AJAX调用和对象(或数据存储)将是您的模型.小部件和CSS将是您的视图.Controller基本上就是你的应用程序代码,将它们连接在一起.

为了使它们分开,我建议使用松散耦合的事件驱动系统.尝试尽可能少地直接访问对象,保持它们"黑盒子"并通过自定义事件或发布/订阅主题获取数据.