XJawa. The Ajax Software Saloon
  在线人数:  其中会员:  访问总人次:
会员总数:  今日注册:  注册  站内短信
[]!  更新信息  注销


当前位置: 首页 7wxAop开发框架 | 7wxAop 应用 | XJawa原创观点 | Ajax深入技术 | Ajax新闻(实验栏目,不再更新) | 7wxAop成功项目
模型概述

  编程模型概述 (版本1.1 Leebai/2006.04)


概述

7wxAop是一个基于Ajax概念的Web开发框架,由浏览器端的7WX框架和服务器端的AOP框架构成。“7WX”是“XML”翻转过来的形状,其含义为“非XML的中客户(Ajax)框架”,前端程序只依赖DOM和Javascript,不需要XML。“AOP”是Action Orient Programming的缩写(不同于Aspect Orient Programming的AOP),强调后端编程以Action(或者叫Request、Command、Service)为中心,把每个HTTP Request的处理过程都看做一个独立的业务逻辑Service。

目前的AOP只实现了for Java的版本,要在Servlet容器中运行。在AOP for Java 中,后端应用程序是一个包含一组Action实现代码的Servlet,复杂的业务系统由数个Servlet构成。由于后端只实现单纯的业务逻辑代码,因此代码数量能明显减少。

7WX下的前端程序都是一些含脚本代码的静态HTML文件,由于框架的功能封装,应用程序要写的脚本代码也是很少的。

7wxAop并非Web2.0和Ajax浪潮下的产物,其技术来自2000年的一个电子商务系统项目的"商务洽谈室"模块,框架主体程序在2001-2002年间基本完成,并在很多软件项目中得到应用。2005年Ajax概念被广泛接受,7wxAop经过局部改进,升级为目前的1.1版本;2006初,进一步改进了前端框架7WX,增加了对Firefox浏览器的支持。

设计目标

7wxAop的设计目标是实现简单、高效、低成本的Web应用开发。相比之下,Ajax所能带来的“无刷新的用户体验”却更象一个副产品。

7wxAop力图降低对开发人员的技术要求,用7wxAop开发应用系统,开发人员不用学习XML、JSP、标记库、具体的Servlet API、EJB、JMS、JNDI、O/R Mapping、设计模式、UML、RUP...等等花样繁多的技术。7wxAop认为,95%以上的Web软件项目用不着太复杂的技术,7wxAop能让普通开发人员把常规项目更快更好地完成,至于余下5%的高级项目,让高手们去想办法好了:-)。在7wxAop看来,J2EE Pet Store样例程序是一个“把简单的问题复杂化”的典型,Java开发社区的最大恶习是把应用开发当科学研究,开发人员的学习时间大大超过工作的时间,而工作成效却往往不如.Net及PHP的开发者。7wxAop认为用Java做后端系统是目前最好的选择,但基于J2EE的开发工作要简单化。

B/S通讯模式

Ajax框架的核心是浏览器和服务器之间的异步通讯,通常的Ajax程序使用非W3C标准的 XMLHttpRequest 作为通讯组件,7wxAop没有用XMLHttpRequest,而是采用简单的IFrame。从7wxAop的实践看,封装良好的IFrame通讯机制比XMLHttpRequest更好用,也更易用

在7wxAop下,浏览器访问服务器端的Action通过一个简单的callServer(servletName,actionName,data)函数(7wxAop不追求绝对的面象对象编程),如果Action执行中有问题(包括程序错误及程序提示),框架自身会把信息报告给用户,不需要前端开发者编程处理;如果Action被顺利执行,则会回调名为on_actionName()的函数,前端编程者要做的就是实现这个函数。

callServer()中的data参数就是要提交给服务器的数据。data可以是简单的url参数,如“userid=zhangsan&password=zs”;也可以是一个Form元素,如loginForm。由此可以看出,7wxAop下向服务器发送数据是很简单的,不需要将数据来回转换。

在回调函数on_actionName()中,前端代码可以访问返回数据buffer中的数据,如 buffer.userName 。buffer中的数据都是Javascript变量,可以直接引用,不像XMLHttpRequest中还要解析一翻。因此,7wxAop下使用后端返回数据也比XMLHttpRequest方式简便。返回数据有简单变量、多属性对象和数据集(形式上是数组,由于Web协议的无状态性和请求返回数据的容量限制,数据集用数组存放是最佳的)三种,数据集的元素可以是含多个属性的对象,也可以是数组。

B/S通讯举例:对于用户登录操作,在7wxAop下的前端代码如下:

<!-- 定义一个id为"loginForm"的标单,含用户id和口令输入域,按钮onclick调用login() -->
function login(){ callServer("UserServlet","login",loginForm); }
function on_login(){ alert("您好," + buffer.userName + "!"); }
<!-- 其他登录错误及提示7wxAop系统自动处理 -->

上面的通讯机制可以参考7wxAop框架结构图:
7wxAop框架结构图

7WX前端组件

Ajax的“无刷新”页面确实能带来更好的用户体验,但是如果所有的界面变化都通过innerHTML或DOM方法直接实现,那么前端开发工作量将十分巨大,因此Ajax目前还被认为是“高开发代价”的技术。解决这个问题的途径之一就是封装具有数据绑定功能的界面组件,依实际需要,7wxAop主要设计了三种数据绑定组件:TreeView,ListView,FormView。

TreeView组件主要用于功能导航界面,可以和服务器端返回的含父子关系的数据集绑定,可以绑定整棵树,也可以绑定子树,树节点可以动态更新,支持右键菜单,支持节点选择功能。

ListView组件用于显示列表,可以和数据集绑定。与有些Ajax框架的列表封装不同,ListView不支持数据编辑,它的侧重点在于支持各种显示样式的列表,ListView的显示基于HTML模板,可以用于表达复杂的列表,并内置数据翻页功能。ListView还支持三维列表,因此可用于显示Outlook风格的折叠式导航器。

FormView也是基于模板的组件,可以和返回的数据记录绑定。FormView具备7wxAop框架原创的“元信息自适应(Meta Adaptive)”特性:利用数据表的Metadata(字段数据类型、是否非空、长度、精度、小数位数、主外键关系等等),自动透明地对表单中的输入控件进行外观调整、输入限制及提交验证,最大限度地减少表单开发的工作量。

服务器上的ActionOP(AOP)开发

Ajax模式的Web程序,由于后端服务器不再负责页面流程控制,因此不但Controller层变得简单,而且Action与页面转向完全无关,Action本身就是纯粹的业务逻辑Service。7wxAop中,后端AOP框架的设计目标是简化Action开发。由于每个Action都有共同的生命周期,都有一些共同的功能,因此可以把它们的公共部分“横切”到框架里面来做,使这些功能对Action完全“透明化”,而让业务Action代码只做各自特有的功能。目前版本的AOP,框架负责的公共功能有:数据库连接与释放、事务处理、异常处理、访问日志、权限检查、运行性能监测等。

您也许已经看出这里的ActionOP与AspectOP在“横切”方面有些雷同,这并不奇怪:其实AspectOP近年来之所以被广泛接受,和基于Request的应用的普及有很大的关系。

Action在AOP框架中不做为一个个Bean、而作为一个个方法来实现,这些方法属于某个Action集合类,而一个Action集合就是一个应用,Action集合类继承于7wxAop的WebActions类。7wxAop约定,WebActions子类中的以下划线"_"开头的方法是Action方法,可以被浏览器端的callServer()函数调用。

在Action方法中,开发者可以访问HttpServletRequest对象,获得前端传过来的数据。可以通过JDBC或其他持久层访问技术完成业务逻辑。最后,对于查询性质的Action,通过WebActions类提供的sendXXX()系列方法把执行结果数据传回到前端;对于更新或执行性质的Action,什么都不用做,前端会知道执行是成功的。

对于占绝大多数的、基于RDBMS的软件系统,根据我们的经验,绝大部份的Action要做的事都比较简单,通常只是一些对数据表增删改查的操作。7wxAop认为用面向对象的Java代码来描述这些简单的关系表操作有点匹配上的问题,代码即不直观,也没有开发效率。对这类以操作关系表为主的Action,建议用7wxAop框架原创的AutoAction(和存储过程有点类似)来描述。AutoAction由一组称为AutoSQL的语句构成,AutoSQL中即包含前端输入变量、系统变量的引用指示,也包含要输出到前端的数据集的指示。比如,要给前端返回当前登录用户的所有订单,可以写成:

orders:=select * from t_order where userid = {sessionvalue_userID}

根据实际开发经验,业务系统的90%的Action都很容易通过AutoAction来描述,因此7wxAop可以极大地减少程序代码,程序也更直观、更容易维护。

演示程序兼开发维护辅助工具

7wxAop框架的开发经历了很长时间,框架的实用性在很多项目中都得到了验证,其中包括基于7wxAop的BBS、CMS。而最基本的验证演示程序就是一组7wxAop开发维护辅助工具:Studio、DBView、FileView、以及框架随带的用户管理模块。这四个程序性质大不相同:

  • Studio展示框架运行监测和“横切”管理
  • DBView展示JDBC的元数据访问能力,同时还能根据数据库元信息生成7wxAop的前后端程序
  • FileView是文件系统访问,典型的非数据库应用
  • 用户管理是典型的数据库应用

总的来说,7wxAop框架是一个通用Web开发框架,适合各种类型的Web应用。


 


  阅读次数(今天):3465()   打印】 【关闭

 最新评论
2008-06-03 21:08:36   admin   IP:221.222.179.*
to tln:

管理系统页面布局的封装在/commonjs/sys_core.js中。xfnavigator代表常规布局(上头及页签+左导航+右内容)的左导航帧。

2008-06-03 21:04:47   admin   IP:221.222.179.*
to fish:
下载包中,多个应用都用到TreeView。其中FileView是很典型的节点动态加载例子。

2008-06-02 17:36:35   tln   IP:59.50.136.*
初学者:
parent.xfnavigator.userIsAdmin;
看了users.html,xfnavigator怎么理解?
查找不到这个元素的
对js了解不是很深!谢谢

2008-06-01 22:17:05   fish   IP:221.217.202.*
要是在能写个TreeView用法的例子就好了 呵呵

2008-04-26 11:01:00   admin   IP:123.122.57.*
to yxdjob@sohu.com:

国产,,,目的是介绍一种Web开发思想,启发大家的思路。

2008-04-22 11:27:08   yxdjob@sohu.com   IP:202.106.86.*
感觉整个思想很棒,用java的各种框架确实让人头大。您这个是国产的吗?是什么目的呢?

2007-10-25 11:37:25   admin   IP:202.43.146.*
to 218.83.108.*

启动后以"xUser身份"登录可以看到,"系统管理员"看不到。

7wxAop与一般系统不同,在系统管理员之上还有一个“xUser身份”,对应于“系统开发者”,只有该身份可以直接操作服务器上的数据库和文件系统。系统管理员可以在studio中指定谁是“xUser”。

2007-10-23 08:11:58   匿名   IP:218.83.108.*
的确不错,不用配置就可以用了
不过DBView、FileView怎么没有看到

2007-09-03 16:26:06   阿贵   IP:222.222.108.*
这个框架确实简单易用,开发效率高,一般的业务需求完全可以胜任的.之前公司采用这个框架开发,后来又采用多层结构的面向对象ORM,现在有点感觉还是这个实用,起码在我们小项目里是实用的.

2007-08-13 11:19:28   admin   IP:210.82.103.*
to bogdoy@sohu.com:

7wxAop目前没有丰富的文档支持开发,因此初学者可能会困惑。但里面7wxAop没有复杂的东西,整个框架也没多少代码,我的建议是使用者大致读一遍框架代码,理解设计思路,一不变应万变。

2007-08-10 23:29:57   bogdoy@sohu.com   IP:61.144.54.*
老大我是一个刚刚想学java web开发的人.
我想知道我适不适合学习您的框架呢?

2007-04-26 14:39:21   admin   IP:192.168.100.*
to 全国大补钙

左边导航栏的“技术文档”中,有比较详细的。

2007-04-25 22:39:36   全国大补钙   IP:125.34.217.*
ActionOP,有点意思,希望看到详细文档。

共有 13 条评论

 发表评论
网名:  (不填则为匿名发布)   验证码:  必须输入
评论:
· 请尊重网上道德,遵守中华人民共和国的各项有关法律法规
· 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
· 本站留言板管理人员有权保留或删除其管辖留言中的任意内容
· 您在本站留言板发表的作品,本站有权在网站内转载或引用
· 参与本留言即表明您已经阅读并接受上述条款