posts - 176, comments - 240, trackbacks - 0, articles - 7

AJAX and AJAH and MVC

Posted on 2006-05-09 22:56 canonical 阅读(1481) 评论(2)  编辑  收藏 所属分类: 软件开发
  传统的Mode2模式的服务器端框架在处理AJAX应用的时候存在一定的不适应性,这主要的原因在于Model2基于推模式,它隐含的假设是基于action的处理结果生成整个页面,而AJAX应用中所强调的是页面局部的变化,只更新发生变化的部分,而不是重新生成整个页面(change instead of create), 这两者之间存在着内在的不协调。有些人推崇后台服务程序只返回xml数据的方法,将显示层完全推到前台。虽然在前台通过js脚本操纵DOM节点可以实现非常细粒度上的控制,但是我们并不总是需要最细粒度上的控制权的。例如现在我们在前台实现一个grid控件, grid控件本身只需要控制到单元格层次即可,而不需要对于单元格里存放什么内容有预先的假设. grid.getCell(i,j).innerHTML = cellHtml是非常自然的一种解决方式。完全通过dom来构造界面面临着众多问题,除了浏览器bug这种挥之不去的噩梦之外,在实现过程中我们往往会引入对界面元素的大量限制条件,而无法做到集成各种来源的控件。
  在服务器端生成页面片断的方式也称为AJAH,表面上看起来它比AJAX要简易一些,是很多服务器端框架引入AJAX概念的乡间小径。但有趣的是在基于拉模式(pull mode)的服务器端MVC框架中,AJAH是在架构上比AJAX更加灵活的一种方式。在witrix平台的jsplet框架中,web访问的基本形式如下:
   /view.jsp?objectName=XXObject&objectEvent=XXEvent&otherArgs&tplPart=XXPart
其中objectName对应于后台的服务对象,objectEvent参数映射到服务对象的方法,view.jsp是对于后台对象进行渲染的模板页面,而tplPart参数可以指定只使用模板的某一部分进行渲染。如果我们选择json.jsp或者burlap.jsp作为渲染模板,则可以退化到返回数据而不是内容的方式。在js中进行简单的封装后我们可以通过如下方式进行远程调用:
  new js.Ajax().setObjectName("XXObject").setObjectEvent("XXEvent").addForm("XXFormId").callRemote(callbackFunc);
   它对应的url请求为
   /json.jsp?objectName=XXObject&objectEvent=XXEvent&...
对于同样的后台业务处理,我们可以自由的选择渲染模板,则可以很自然的得到更多的处理方式,例如返回javascript代码来实现对于前台的回调。

Feedback

# re: AJAX and AJAH and MVC  回复  更多评论   

2006-05-10 23:36 by 原创专栏 开源学习
我觉得关键是你的系统有多少功能或界面需要用ajax技术。如果少的话,可能你提供的思路可以。但如果是以ajax为核心的程序,考虑用些成熟的ajax 框架,避免自己再开发一套框架。

没排版感觉看的晕

# re: AJAX and AJAH and MVC  回复  更多评论   

2006-08-30 13:30 by Benny Bao
感觉AJAX比较适合MIS类的应用,而AJAH比较适合开发以内容发布为主的系统。
AJAX由于提倡数据和展现的分离,因此很适合MIS应用这一类界面元素有较多固定模式的场合。例如大多数的MIS应用的界面上都是由Grid、Form、Tree之类的元素构成的。况且数据和展现的分离后,更加有利于在前台编写一些数据校验和运算这样的逻辑。
当然对于类似开发像论坛这样的应用,如果一味追求数据和展现的分离也是不太合适的。这时用AJAH实现页面的局部渲染应该是一种更好的选择。
所以我觉得开发具有RIA特征的WEB应用以AJAX为主、以AJAH为辅是一种比较好的方式。

只有注册用户登录后才能发表评论。


网站导航: