posts - 3,  comments - 0,  trackbacks - 0
我们知道:B/S 开发模式越来越受推崇,公司的项目都是基于B/S模式开发的。
其优势不言而喻。

传统的B/S系统有几大缺点

1. 表现层的代码不易复用
2. 网络上跑着大量重复的数据
3. 服务器几乎要处理所有业务逻辑和动态交互,经常执行重复的操作,负载过重。
4. 从人机对话的界面上,难以要求客户的操作规范化。
5. 服务器只能被动接受请求,而不能通过“推”的方式把数据主动发送给客户端。
...

为解决这些问题,必须有一种全新的开发模式来开改造 B/S。

针对上面几个问题,制定了以下几个步骤来解决:
1.客户端的脚本及html 以“类”或“可复用的组件”的方式存在。

    说明:    面向过程的 JavaScript -> “基于对象”的 JavaScript
                    原子型的 dhtml -> 组件模式的 htc, wsc

2.在客户端建立一块公共的存储空间(内存中),即:存在一个全局对象(类似delpehi、c++ builder中的 Application),所有应用页面都共享该对象,并能通过这个对象交换数据或复杂对象。

    注意:    构建 appliation 对象实现上面的功能,该对象的生存期和整个应用保持一致。(注意:这 appliation 是指客户端的,并不是 asp/jsp 中在服务器端的application对象)

3.实现 客户端和服务端 的数据同步机制,减少客户端的数据丢失率,避免对服务器作重复请求。

    说明:    所有类在客户端实现cache,重启IE或重启系统皆不必重新从服务器加载类资源。
        采用 RMI/RPC 方式,实现客户端 的 js 对象 能远程调用 服务器端的一个对象(或应用)的方法,并能保存其状态和数据。对开发者来讲,这种调用机制是透明的。
        代码和数据分离,所有涉及UI的页面均用静态页面形式存在(减轻server负载,且这些静态资源会被IE自动cache,下次不会被重复下载),所有动态交互部分的数据,除了以RMI的方式返回给客户端以外,皆以 XML 形式返回,并在客户端建立cache机制。


4.用 “模式/同步” 的操作方式,代替传统中 “非模式/异步” 的操作方式,从而约束用户的操作步骤,使其规范化。

    说明:    浏览器很多操作默认都是 异步/非模式 方式的(比如:form的提交,window.open,等等)这样可以实现多线程请求数据,会比较快,但有时侯在处理单个流程,却会带来不少麻烦。
        比如:某个操作要等数据提交成功后执行,我们希望能有一个阻塞,待执行完提交后,接下来执行后面的操作,然而异步方式只能用回调的方式实现,中途的各种情况处理的逻辑判断太多,着实麻烦。
        解决办法:对数据请求或发送:用 xmlhttp xmldom 的同步方式调用。
        对窗体模块的调用:用 showModalDialog 方式调用。

5.启动“扫描线程”侦听服务器的“推”动作,或者利用 ClientSocket 组件和服务器进行有连接的通讯。


示例:

<html>
<script src="/common/jslib/jsvm.js"></script>
<script>

_import("js.lang.System");    // 可以在一开始就加载一些类或包
_import("js.graphics.*");


function init(){
    try{
        
        ...
        _import("cn.x86.common.user.Login");     // 也可以在过程中动态决定是否要加载一个类或包
        var login = new cn.x86.common.user.Login();

        login.loadInfo();    //远程调用,直接从服务器端得到登录者信息
        
        ...
        var cav = new Canvas(); // 画布类,实现 UI 作图 这里也可以用完整的类名来实现: var cav = new js.graphics.Canvas();
        
        cav.pen.color = "blue";
        cav.outText(100,100,"Out Text");
        cav.pen.color = 'red';
        cav.lineTo(500,300);
        ...

    }
    catch(ex){
        System.out.printError(ex);
    }
}


</script>
<body>
    -- 跟JAVA中的代码差不多! --
</body>
</html>



上面设计涉及到的优缺点

缺陷:

1.对developer的客户端的技术功底要求较高。    (可预见)
2.客户端的负载较传统的模式要高。        (可预见)
3.对客户端的浏览器版本及运行环境要求比较规范。    (已确认)   
4.对复杂对象的序列化工作将会增多。        (可预见)

优势:

1.服务器负载,和网络流量能大幅度减少。        (已确认)
2.模块的粒子度,灵活性,复用性将大大增强。    (可预见)
3.模块(类)之间的依赖性清晰,且易维护。    (可预见)
4.整个系统运行性能将提高。            (适客户端的环境而定)
5.系统开发周期能减少                (视项目具体情况而定)



注:此文摘自http://bbs.51js.com/thread-21119-1-3.html
posted on 2007-04-26 16:35 bobily 阅读(150) 评论(0)  编辑  收藏

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


网站导航: