Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330962
  • 博文数量: 76
  • 博客积分: 8291
  • 博客等级: 中将
  • 技术积分: 1540
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-22 10:13
文章分类

全部博文(76)

文章存档

2009年(1)

2008年(75)

我的朋友

分类: Java

2008-03-13 13:09:25

几乎所有的新的编程技术,从它出现的时候,就具备了一些“个性”,这些“个性”,使得使用者被迫去接受一些约束与限制,而这往往也是导致项目工程出现问题的主要根源。组件程序员的使命,就是不断的去除这些技术的”个性“,使之能够无缝的结合到工程中去。
    ——
陈治文 [注]

         ExtJS一个基于YUI技术,使用Spring理念构建,通过Java Swing开发机构组织可视化组件的RIA技术产品,无论从界面的CSS样式的应用,到数据解析上的异常处理,都可算是一款不可多得的 JavaScript客户端技术的精品。事物总是有两面性,因为ExtJS的服务端程序结构是基于PHP+MySQL的技术,因此,ExtJs或多或少的 也带有了一些"PM"的特性,有很多在PHP环境中可以轻易解决的问题,在其它应用环境中就不是那么容易的事情了。现在,公司刚刚上马的项目OA系统,正 在使用ExtJs的技术,后台程序使用的不是PHP,几天下来,搞得我的部下们天天在抱怨,“我们公司转型搞PHP吧!”,为一门新的技术,而去冒险技术 转型,对于一名职业软件项目经理人来说,是不会这样去做的。需要做的是,改造ExtJS,或者调整目前的后台数据组件技术模型,保证OA系统项目正常开发 进度。

         在没有使用ExtJs之前,公司已经开发了一套客户端与服务器端的组件系统,但是,就是因为客户端数据处理能力已经可以与ExtJS相提并论,但是因为公 司的CSS技术力量过于薄弱,经过权衡之后,才决定使用ExtJs的。也就是说,由本公司开发的服务器端组件仍然继续在各个公司项目中应用。

        公司原有的数据分页,分为两种,即客户端分页与服务端分页两种。

         客户端分页的原理是,由服务器下载全部的数据集文档至客户端,构建成临时的客户端数据源(类似于Ext.data.Store),而后,由一组程序对于这 个数据源进行分页查询,查询原理与一般的服务器分页原理是一样的,这个由于开发智力成本比较高,集成性设计比较困难,再加上,DIV 是可以加上滚动条,也不需要进行分页以控制版面整齐,这个子项目,最终被无限制地搁置了。

         服务端分页的原理也大致与ExtJs相同,服务器接受一定的分页指示数据,然后向客户端输出相应的数据集。这种分页方式是目前公司成熟的技术方案之一,很多项目都是采用了这种分页模式。

        问题就出在这里,我们的分页具备配置是这样的,在服务端,由硬性编码设置当前每页的数据行数,而后,由服务端发送页数,服务端接受返回带有,当前页数据与总页数的数据集。

        第一步:服务器端:

                       var _data = SessionFactory.getData([数据索引语句 , [页数据量]) ;

        第二步:客户端:

                      _http.send([请求URL]) ;

         第三步:服务端:

                     

                            

                              ... ...

                     

        第四步:客户端:

                     var _data = _http.receive() ;

         而ExtJs分页则是,根据数据行起始量start,与数据行读取量limit来进行分页的,与我公司的分页方式完全不同。

         这个分页方式经调查,才知道这种分页方式与MySQL的分页语句limit有关,使用该语句很容易就可以实现这种分页效果。而我公司使用的是SQL Server 2000 并不提供这样的快捷方法,而且,由于公司已经开始产业化软件生产模式,数据库部分都被有效的封装(类似于Hibernate),因此,就算SQL Server 2000 提供了limit方法,也很难在现系统集成使用。

         唯一的方案就是增加组件的limit分页方法。由于limit分页方法是需要基于行号的概念的(即每行都有一个唯一的数字标识,且这些标识都是有序的), SQL Server 没有这个概念, 可行的方法就是,先将需要分页的数据全部读出数据库。而后进行循环判别处理。

while(!_rs.EOF){
           
                if(_start != null && _end != null){
               
                    if(_cnt < _start || _cnt > _end){
                   
                        _rs.MoveNext() ;
               
                        _cnt ++ ;
                   
                        continue ;
                       
                    }
                }

... ...

        这样的话,虽然在效能上有所降低,毕竟要读取全部数据,但是至此,关于ExtJs分页问题已经解决了。相关的源代码,近期可以与大家共享。

        聪明的读者一定会发现,我们公司使用的服务端的语言是ASP,如果大家也在这个网站上看过ASPServer的组件说明的话,现在告诉大家,那个也是由我 使用ASP开发的。可能大家都会想,ASP会有什么生产力?这个答案,随着大家不断的关注这个网站,你们将会发现,技术的发展,并不只是更换一种语言,而 是一种理念,使得我们的设计思维得到解放!作为曾经是JSP标记库开发程序员的我,后来成为ASP组件设计员,再到即将成为.NET二次开发工程师,对于 编程语言的理解是:“一切为了公司发展需要,一切为了项目进度需要”.

阅读(672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~