免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6465 | 回复: 19
打印 上一主题 下一主题

软件设计中常用模式讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-23 19:45 |只看该作者 |倒序浏览
在许多软件中都有C/S(客户机/服务器)、B/S(游览器/服务器)、三层架构等设计方式

这三种方式各有优缺点

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

论坛徽章:
0
2 [报告]
发表于 2003-04-23 19:48 |只看该作者

软件设计中常用模式讨论

客户机/服务器的优点就是实现与界面分开

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

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

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

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

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

论坛徽章:
0
3 [报告]
发表于 2003-04-24 15:17 |只看该作者

软件设计中常用模式讨论

我觉的C/S模型的缺点:
1 需要下载客户端。
2 不能直接穿过防火墙(自己用XML的除外)。

论坛徽章:
0
4 [报告]
发表于 2003-04-24 17:57 |只看该作者

软件设计中常用模式讨论

楼上说得对
但是编程时可以把数据与程序隔离
保证数据的安全性
另外还可以在server增加一次认证


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

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

论坛徽章:
0
5 [报告]
发表于 2003-04-25 18:47 |只看该作者

软件设计中常用模式讨论

由大菠萝说的我想到了单层架构程序的使用情况

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

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

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

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



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

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

论坛徽章:
0
6 [报告]
发表于 2003-04-25 18:52 |只看该作者

软件设计中常用模式讨论

说到动态库
想到了软件开发中的另一种技术
那就是插件

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

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

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

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

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

论坛徽章:
0
7 [报告]
发表于 2003-04-25 19:02 |只看该作者

软件设计中常用模式讨论

插件实际就是使用动态库的动态load实现的

插件定义一一套基本接口

如web browser,它可以定义

  1. 动态库启动时进行初始化操作
  2. bool load ()

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

  11. unload动态库时动态库进行的操作
  12. unload
复制代码

等其它接口

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

论坛徽章:
0
8 [报告]
发表于 2003-04-25 19:10 |只看该作者

软件设计中常用模式讨论

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

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

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

论坛徽章:
0
9 [报告]
发表于 2003-04-25 19:12 |只看该作者

软件设计中常用模式讨论

以上是插件的使用
及编程方法

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

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-04-27 19:58 |只看该作者

软件设计中常用模式讨论

精彩!!  希望“ 无双”斑竹再接再励,各位坛友也来表表高见啊! :)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP