一个关于 B/S 开发模式的讨论

转载 2007年09月16日 18:05:00

来源: http://bbs.51js.com

我们知道:B/S 开发模式越来越受推崇,我所在的公司近2年中较大的一些case都是基于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 组件(我已封装成一个htc)和服务器进行有连接的通讯。


我下面摘一段客户端的 code,展示一下这种开发模式的代码风格。(比如:xxx.htm)

<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.系统开发周期能减少                                (视项目具体情况而定)




整个框架的设计工作已近尾声,我提前把它拿出来让大家讨论一下,看看同志们有什么意见或好的建议,也好修正。
待2.0版本全部完成以后,与大家一起分享!
欢迎有兴趣的同志发表一下观点。

 

相关文章推荐

手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统(附源码+视频教程(1,2节))

一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座...

基于B/S模式的设备管理系统开发

摘  要:介绍了基于B/S模式的设备管理系统的结构组成与功能特点,为煤炭生产企业各级设备管理部门进行设备的管理提供了便捷可靠的信息管理系统。 关键词:设备管理   B/S模式  机电设备 0.引言...

Ubuntu上进行B/S模式(javaweb)开发,简单框架示例

准备工作: 安装配置Tomcat 1、去官网下载最新版本的Tomcat压缩包(以zip或tar.gz为后缀的),奉上官网链接 http://tomcat.apache.org/download-...

关于目前软件开发的两种模式 C/S B/S

软件目前的两种开发模式: B/S的模式与C/S模式 C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统, 如Oracle、Sybase、I...

B/S模式FLASH与C++开发的游戏DEMO

  • 2011年04月22日 23:16
  • 1.21MB
  • 下载

深入 理解Http协议、什么是B/S模式学习

HTTP协议是电脑与电脑之间通过网络传输的协议。所以为了更好的理解HTTP,我们就来模拟一个服务器,用浏览器发送请求,看看浏览器发来的消息是什么。 下面是一个模拟服务器的代码package cn.h...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个关于 B/S 开发模式的讨论
举报原因:
原因补充:

(最多只允许输入30个字)