这段时间项目不是很紧,自己抽出时间来把以前的系统技术框架改进来下,算是v2.0吧。整个实现过程用啦2个多月的时间(算是快的)。
WM framework V2.0主要的技术路线从原来的s1i2迁移到s2i2s2。struts升级到啦版本2,对s2的了解不是很深(在以前的项目没有引入过),所以在WM framework2.0仅引入啦s2对多线程的实例过程,抛弃啦s1的单例模式。其他的基本上没用到,因为对s2的研究后,就喜欢上这点啦,o(∩_∩)o...哈哈。
WM framework2.0之所以引入s2,原因有1。看中spring对事物控制力度;2。WM framework整合更多的主流技术框架;
WM framework2.0还是秉承1.0的ajax数据请求模式(DOM+XML+BEAN)。其中大部分主推异步处理模式,毕竟同步处理很容易ie的司机和对客户的友好性。
2.0版本增加了异步处理,请求响应返回处理的回调函数,这是大伙对1.0反映最多的问题啦。
WM framework V2.0 前台js框架
2.0版本对各js对象进行了抽象,继承。
各js对象函数的参数由以前的基本数据类型改为,数据对象object,这样防止了改函数参数不用同步到其使用模块。
WMqryService完成列表数据的查询;
WMeditService完成单位数据的增、删、改;
WMoptService动态select加载、联动、数据校验、标志数据取值,树形控件的处理。原打算把树处理分开,但是后台发现WMoptService可以胜任就没有麻烦啦。
2.0的js树
2.0中还是用的mztree和dtree,用mztree主要还是看中他对节点的增、删、改很方便,但是很郁闷的是mztree不可以用ajax的异步数据加载,老是提示“js没有权限”,跟踪了mztree的源代码,发现是在加载图片的时候错误,改了好几个写法,还是没搞定,这个问题在1.0中就困扰了好久,但是如果用同步数据加载就不会存在这个问题啦,看来只有哪天问下mz本人啦(可惜那家伙的qq不加我,没面子啊),最后没法子改用dtree来填补这个缺口啦。还有一个涉及js树的修改就是构建数据的排序问题,在1.0我是用了个“省事”通过修改的po的属性顺序(为这事,还有几个同事还觉得莫名其妙,o(∩_∩)o...哈哈)。
2.0对select的option动态构建修改
解决option 一次多联动问题(多个option,多个select对象);在1.0我发现凡是涉及两个以上option都是通过多次request,这样造成了没必要的多次请求(浪费)。所以在2.0修改了WMoptObject接受opt对象的类型可为object数组、字符串、单object对象。
2.0对表单字段值同步
很多时候一个页面表单的数据编辑不单单涉及一个数据表,而需要对个数据对象po的同步,一个简单的列子一个新用户的注册,可能就会涉及3个数据对象(用户注册信息logininfo,用户基本信息userinfo,用户信息扩展userinfo_other),按照1.0的数据处理方式,只能在前台先获取一个key然后同步。在2.0实现数据对象key同步后请求获取key的过程就可以舍掉。这样一来节约了页面处理的处理时间,又避免了key的浪费。
目前支持数据组合方式:
1:1..:1;一对一
1:n...:n;1对多
n:n;多对多(表对象数相等)
n:....:n;多对多(表对象数相等)
2.0对数据库事物控制
1.0里面我们使用的是ibatis的DAO框架来处理和控制数据的,但是ibatis后来好像不理DAO这个东东啦(够狠的),丢给spring去整合啦,所以,在2.0我们使用的spring来做事物控制。
2.0引入了HTC来封装树形控件和Key Input
htc这玩意儿还是2007在深圳做项目的时候接触过的啦,当时开始觉得htc这个东西很不错,提高了代码的重复可用和可移植性,可后来发现一个页面表单如果引入的htc控件过多,其页面本身的加载速度就会损失。所以在WM framework 2.0我没有过多做htc控件封装。仅弄了wm_tree.htc和wm_key.htc两个。因为取数和取树的地方做成htc控件可以少写n行js代码
htc方式加载tree:
<tsstudio:wm_dtree id="testtree" objName="d" isCheck="true" ckParent="false"
treeType="2" isUrl="true" refBut="true" cPanel="receText" keyPanel="receKeyText"/>
js脚本加载tree:
d = new dTree('d',cps+"/image/org/");
d.config.folderLinks=true;
d.setTreePanel(treeviewarea);
d.setTreeType("1");
d.setIsUrl(false);
d.setRefBut(true);
d.clearTree();
var ac = new WMaction();
var po = new WMparamObject();
po.setActionType("1");
po.setHitObjId(treehitdiv);
po.setTextObjId(treeviewarea);
po.setIsasy(true);
po.setXmlStr(xmlStr);
po.setUrl(cps+'/XmlService.do?type=4');
po.setHandleObj(d);
ac.setParamobj(po);
ac.execute();
看出来啦吧,不是一个数量级。o(∩_∩)o...哈哈。
2.0对表单字段取值范围控制
这个基本上就是多加几个数据校验,没太多好说的。
以上基本就是WM framework 2.0的修改,也是2个多月敲键盘的成果。原来打算实现代码的自动生成,研究了freemaker好几天,还是没整出来,要考虑的东西太多啦,先放一边啦,不然到时候全部代码都自动生成,我们这些代码工人就没饭吃啦,2个多月说辛苦算不上,毕竟这段时间项目上的事情不多,留给我们打“酱油”的时间多多()。快到10国庆啦,这也算是我对中国信息化建设的一点小礼物吧。