中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 软件工程 > 综合文章
软件设计中常用模式讨论
作者:未知 时间:2005-09-13 19:43 出处:ChinaUnix.net 责编:chinaitpower
              摘要:软件设计中常用模式讨论

在许多软件中都有C/S(客户机/服务器)、B/S(游览器/服务器)、三层架构等设计方式

这三种方式各有优缺点

我想大家能够针对这三种结构的特点及平时使用到的情况做个讨论

 无双 回复于:2003-04-23 19:48:51
客户机/服务器的优点就是实现与界面分开

因此开发速度会更快
并且可以提供一个统一的接口,其它客户机可以根据自己的风格设计自己界面

在中小软件中这种使用的比较多吧

缺点呢,如果软件再复杂的话
服务器的编程就会困难
这时就需要使用三层架构方法

另外尤其是运算都是放在服务器这端的
而客户端对运算要求很少
所以对服务器的性能要求较高

应该还有其它的优点和缺点吧
大家说说看

 大菠萝 回复于:2003-04-24 15:17:30
我觉的C/S模型的缺点:
1 需要下载客户端。
2 不能直接穿过防火墙(自己用XML的除外)。

 无双 回复于:2003-04-24 17:57:02
楼上说得对
但是编程时可以把数据与程序隔离
保证数据的安全性
另外还可以在server增加一次认证


常用软件
如果对数据安全性不是很高的话
他们一般都是直接写

只有在数据要与程序隔离时时才使用c/s或以上的结构

 无双 回复于:2003-04-25 18:47:02
由大菠萝说的我想到了单层架构程序的使用情况

如果程序比较简单
那么一般是直接编写
不用C/S 等架构

两层、三层架构主要是为了方便数据的存储与访问,同时把数据与客户隔离
有利于保证系统中数据的安全性

在单层架构中程序处理所有的事情

如果程序比较大
那么开发过程中可以使用动态库和静态库的方法
动态库是为了代码的可重用
如果一段代码在许多程序中都有用的话,或是如果程序比较大的话
那么使用动态库
不然可以使用静态库



静态库主要是为了开发可以并行,连接后静态库和程序连在一起,对于启动速度没有影响,编成静态库的是一些基本固定的底层接口

动态库load时比较慢
但可以代码重用,并且可以动态装入和unload
后一点对于大程序很重要,因为如果程序很大,那么启动和运行过程会很慢
这时可以先启动主程序
然后由主程序根据需要动态load对应动态库,使用完后unload
这样程序的启动和运行速度就会加快

 无双 回复于:2003-04-25 18:52:50
说到动态库
想到了软件开发中的另一种技术
那就是插件

插件的出现是为了使程序更加容易扩展

刚开始设计程序时你不知道程序要支持多少功能

如web browser,不知道你要支持多少种媒体的播放
如果每出一种新媒体就要升级一次的话

那么程序的开发和维护会很麻烦,每一个新版本都要进行开发并测试
过多浪费人力物力
同时过分的升级也会使用户因经常升级而感到厌烦
而且有时厂商想在你的程序上实现某个功能,但是并不想让别人知道它的实现技术

这时使用插件技术就很有用了

 无双 回复于:2003-04-25 19:02:11
插件实际就是使用动态库的动态load实现的

插件定义一一套基本接口

如web browser,它可以定义
[code:1:20e2aed963]
动态库启动时进行初始化操作
bool load ()

检查是不是支持某个文件类型
bool is_support (const char*filename)
filename ,要检查的文件名
播放一个文件
bool play (const char*filename,const int width,
const int height,char* buffer)
参数意义:filename,要播放的文件名,width,heghit,屏幕显示的宽度高席
buffer,用于输出程序解码后得到的显示缓冲区

unload动态库时动态库进行的操作
unload
[/code:1:20e2aed963]
等其它接口

注意我没有做过web开发,以上只是一个例子

 无双 回复于:2003-04-25 19:10:52
程序启动时先从一个指定的plugin目录读入所有某种文件类型的文件名
(插件的扩展名一般都是特定的,如.plg等,虽然它本来就是一个动态库,从一个.so改名得到的,另外程序一般也指定一个或多个目录为插件目录,启动时会扫描这个目录下所有有这个文件扩展名的文件名,把它们当成插任文件)

注意启动时只是读入文件名
然后调用dlopen 这些库
调用 getsupporttype得到这个插件支持的文件类型(刚才那个issupprot接口定义得不好,应该改成这个,检查支持什么文件类型)
然后保存这个文件名及它支持的文件类型
然后可以dlclose(要不要dlclose随你)

在程序运行中,拿刚才说的web browser来举例,当browser碰到一个.swf时
检查中程序自己支持类型,如果没有,那么检查插件支持类型,如果检查到一个插件支持这种类型,那么再dlopen 对应插任,
然后调用插任的load调用
传入文件名和其它参数
得到解码后的缓冲区
再显示这个缓冲区
调用unload 调用
调用dlclose关闭

 无双 回复于:2003-04-25 19:12:41
以上是插件的使用
及编程方法

能够灵活使用plugi一定可以使你的程序增色不少

下一次就讲讲三层架构的优缺点

 系统工程师 回复于:2003-04-27 19:58:13
精彩!!  希望“ 无双”斑竹再接再励,各位坛友也来表表高见啊! :)

 无双 回复于:2003-04-27 20:18:22
尽量写
只是把自己知道的写出来
希望能和大家交流交流

 无双 回复于:2003-04-28 18:00:34
上面对C/S架构的理解可能是错了

C/S应该是S 数据库,C 客户机,数据库保存数据,客户机直接访问数据库
当然其它方面的应该也是有的,没有说必须限制为这种方式

下面给多层的概念

IT行业的一大特点是经常创造一些新名词,单层和双层这两个概念就是在三层结构出现之后才创造出。单层结构是80年代以来小型应用的结构,典型的是基于Dbase、Foxbase等小型数据库的应用。双层结构的同义词可以理解为传统的客户/服务器结构,是目前占统治地位的结构,典型是基于Oracle、Infomix等大型数据库的应用。三层结构是传统的客户/服务器结构的发展,代表了企业级应用的未来,典型的有Web下的应用。多层结构和三层结构的含义是一样的,只是细节有所不同。

  之所以会有双层、三层这些提法,是因为应用程序要解决三个层面的问题。

一:界面层

  界面层提供给用户一个视觉上的界面,通过界面层,用户输入数据、获取数据。界面层同时也提供一定的安全性,确保用户有会看到机密的信息。

二:逻辑层

  逻辑层是界面层和数据层的桥梁,它响应界面层的用户请求,执行任务并从数据层抓取数据,并将必要的数据传送给界面层。

三:数据层

  数据层定义、维护数据的完整性、安全性,它响应逻辑层的请求,访问数据。这一层通常由大型的数据库服务器实现,如Oracle 、Sybase、MS SQl Server等。

 无双 回复于:2003-04-28 18:02:26
三层架构的优势

  从开发角度和应用角度来看,三层架构比双层或单层结构都有更大的优势。三层结构适合群体开发,每人可以有不同的分工,协同工作使效率倍增。开发双层或单层应用时,每个开发人员都应对系统有较深的理解,能力要求很高,开发三层应用时,则可以结合多方面的人才,只需少数人对系统全面了解,从一定程度工降低了开发的难度。

  三层架构属于瘦客户的模式,用户端只需一个较小的硬盘、较小的内存、较慢的CPU就可以获得不错的性能。相比之下,单层或胖客户对面器的要求太高。我的机器是奔腾133、32M内存、2.5G硬盘,装了IE4.0之后,感觉机器慢子很多,硬盘也只有300多M的空余空间了,已打算将硬盘扩充到4G。试想如果今后还是以单层或双层峁刮主流的话,硬件的更新费用将会有多大,尽管现在电脑价格下降很多,对个人用户已可以承受,但对于企业而言,频繁的台旧机器淘汰,换新机器,这是一笔多么大的费用

  三层架构的另一个优点在于可以更好的支持分布式计算环境。逻辑层的应用程序可以有多个机器上运行,充分利用网络的计算功能。分布式计算的潜力巨大,远比升级CPU有效。美国人曾利用分式计算解密,几个月就破解了据称永远都破不了的密码。

  三层架构的最大优点是它的安全性。用户端只能通过逻辑层来访问数据层,减少了入口点,把很多危险的系统功能都屏蔽了。

 无双 回复于:2003-04-28 18:29:12
三层比二层多了一个中间层
并且所有的通信都必须通过中间层
所以保证了系统的安全性(因为可以在中间层进行验证)

另外因为有三层,所以可以同时开发,各层间业务逻辑更独立
开发和维护会更容易

一般说来
对于比较大的软件,使用这种架构是很合理的

但是所有运算都在SERVER端,CLIENT端对运算的要求虽然不是很高
但SERVER端就要求很高了,如果同时有很多客户同时连的话,那么SERVER的负荷还是很大的,这点是它的主要缺点,就是不能实现负载平衡,CLIENT端的运算能力没有使用到。

另外对于普通的小软件,使用C/S或是单层都已够用,因为数据和业务逻辑都不是很多,使用单层能简化系统设计,减少成本。

 无双 回复于:2003-04-28 18:34:48
随着网络的发展

也出现了一个新技术,那就是B/S架构。B 就是浏览器。S 就是服务器,也就是数据库

B/S可以认为是C/S的一个变种,它们的实现与C/S是差不多的
与C/S相比,B/S不用下客户端,而且可以运行于多平台,不用为每一个平台做一个CLIENT,这些特点都是C/S所没有的

但是浏览器的性能都不是很高,所以在B/S架构中不可能在BROWSER端使用很复杂的运算,运算都是在SERVER端进行,因此对SERVER的性能要求更高了。另外使用的是TCP/IP传送,没有进行加密,保密性不好。这些就是它的缺点


以上就是我对这几种在软件设计中使用的架构的理解

 系统工程师 回复于:2003-04-28 21:11:40
那3层模式的软件架构,中间件层能在多大程度上相对C/S模式来说减轻Server端,也就是DBMS端的运算负载压力。

 还有就是“中间件”分为不同的类型,如:数据库中间件,事务中间件,
对象代理中间件。通信中间件等等。。这些不同的类型是不是也对应不同
“软件业务需求”,还是在同一种“软件业务需求”中同时运用,并起到不同的作用,如果是后者的话,那么在“分担Server负载”方面分别起什么作用呢?

 一无所有 回复于:2003-04-29 10:46:31
作为软件开发而言,中间层最大的好处在于减少对客户的维护,
  业务逻辑全部在中间层,对更新和维护都是有好处,
  但事情往往都是有两方面的,这样一来就加大了对应用服务器的负载,
  而现在性能越来越的客户端的机械没有得到使用。
  如果是做负载均衡,我觉得把客户端的机械也加入到群集里面来倒是一种比较好的方式。
  可惜现在没有人这样做(因为服务器对目前的业务够用),也没有这么好的群集软件。

 无双 回复于:2003-04-29 11:12:55
把客户端的机械加入群集会不会破坏系统数据的安全性

因为如果只是三层的话
那么只有中间层可以访问到数据层的数据

并可以对界面层进行认证和安全管理

另外要做到负盏平衡的话,必然会增加系统的开发难度和工作量
所以了除非在当前硬件性能不够用条件下才会使用

我这么想

 一无所有 回复于:2003-04-29 18:53:41
我的意思在于,如果更好地利用空隙资源;
  至于做负载均衡,现在已经很很多比较成熟的产品了,
  我们完全没有必要去考虑这方面的问题。

   至于安全性等方面,完全没有必要考虑,我们只是用它的cpu和内存,
  而且是做一些很数据库无关的事情的,也就是它并不和数据库直接打交道。
  当然我提的都只是一些理想状况下的东西,特别是针对大型运算用。

 无双 回复于:2003-06-20 00:32:50
补充:
传统的C/S多是使用DELPHI等快速开发工具制作
但随着JAVA的发展与机器性能的提高
在C/S架构中使用JAVA的越来越多
JAVA的主要缺点是运行速度慢
但现在机器性能越来越高,所以这在多数情况下已不再成为瓶颈
并且有跨平台运行的优势在操作系统大战没有结束前
客户为了保护现有投资,必然不想让自己绑死在一个系统上
因此我认为以后会是JAVA类型的C/S代替传统的DELPHI类型的C/S

B/S运算能力弱但是不用下客户端,所以也不会害怕别人在客户端装后门,也方便使用,因此会继续存在于一些对运算能力要求不高的场合

C/S则继续存在于对运算能力要求比较高或是客户端程序比较复杂的场合


DELPHI运算能力较强并且容易写系统相关函数,也会在有这方面需要的领域继续使用

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有