中国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:44 出处:ChinaUnix.net 责编:chinaitpower
              摘要:软件的架构设计

好的开始相当于成功一半

开始之初的架构设计决定着软件产品的生死存亡。“好的开始相当于成功一半”。

开始的架构设计也是最难的,需要调研同类产品的情况以及技术特征,了解当前世界上对这种产品所能提供的理论支持和技术平台支持。再结合自己项目的特点(需要透彻的系统分析),才能逐步形成自己项目的架构蓝图。

比如要开发网站引擎系统,就从Yahoo的个人主页生成工具 到虚拟主机商提供的网站自动生成系统,以及IBM Webphere Portal的特点和局限 从而从架构设计角度定立自己产品的位置。

好的设计肯定需要经过反复修改,从简单到复杂的循环测试是保证设计正确的一个好办法

由于在开始选择了正确的方向,后来项目的实现过程也验证了这种选择,但在一些架构设计的细部方面,还需要对方案进行修改,属于那种螺旋上升的方式,显然这是通过测试第一的思想和XP工程方法来实现的。

如果我们开始的架构设计在技术平台定位具有一定的世界先进水平,那么,项目开发实际有一半相当于做实验,是研发,存在相当的技术风险。

因此,一开始我们不可能将每个需求都实现,而是采取一种简单完成架构流程的办法,使用最简单的需求将整个架构都简单的完成一遍(加入人工干预),以检验各个技术环节是否能协调配合工作(非常优秀先进的两种技术有时无法在一起工作),同时也可以探知技术的深浅,掌握项目中的技术难易点。这个过程完成后,我们就对设计方案做出上面的重大修改,丰富完善了设计方案。

设计模式是支撑架构的重要组件

架构设计也类似一种工作流,它是动态的,这点不象建筑设计那样,一开始就能完全确定,架构设计伴随着整个项目的进行过程之中,有两种具体操作保证架构设计的正确完成,那就是设计模式(静态)和工程项目方法(RUP或XP 动态的)。 

设计模式是支撑架构的一种重要组件,这与建筑有很相象的地方,一个建筑物建立设计需要建筑架构设计,在具体施工中,有很多建筑方面的规则和模式。 

我们从J2EE蓝图模式分类http://java.sun.com/blueprints/patterns/catalog.html中就可以很清楚的看到J2EE这样一个框架软件的架构与设计模式的关系。

架构设计是骨架,设计模式就是肉

这样,一个比较丰富的设计方案可以交由程序员进一步完成了,载辅助以适当的工程方法,这样就可保证项目的架构设计能正确快速的完成。

时刻牢记架构设计的目标

由于架构设计是在动态中完成的,因此在把握架构设计的目标上就很重要,因此在整个项目过程中,甚至每一步我们都必须牢记我们架构设计的总体目标,可以概括下面几点:

1. 最大化的重用:这个重用包括组件重用 和设计模式使用等多个方面。

比如,我们项目中有用户注册和用户权限系统验证,这其实是个通用课题,每个项目只是有其内容和一些细微的差别,如果我们之前有这方面成功研发经验,可以直接重用,如果没有,那么我们就要进行这个子项目的研发,在研发过程中,不能仅仅看到这个项目的需求,也要以架构的概念去完成这个可以称为组件的子项目。

2. 尽可能的简单明了:我们解决问题的总方向是将复杂问题简单化,其实这也是中间件或多层体系技术的根本目标。但是在具体实施设计过程中,我们可能会将简单问题复杂化,特别是设计模式的运用上很容易范这个错误,因此如何尽可能的做到设计的简单明了是不容易的。

我认为落实到每个类的具体实现上要真正能体现系统事物的本质特征,因为事物的本质特征只有一个,你的代码越接近它,表示你的设计就是简单明了,越简单明了,你的系统就越可靠。更多情况是,一个类并不能反应事物本质,需要多个类的组合协调,那么能够正确使用合适的设计模式就称为重中之重。

我们看一个具备好的架构设计的系统代码时,基本看到的都是设计模式,宠物店(pet store)就是这样的例子。或者可以这样说,一个好的架构设计基本是由简单明了的多个设计模式完成的。

3. 最灵活的拓展性:架构设计要具备灵活性 拓展性,这样,用户可以在你的架构上进行二次开发或更加具体的开发。

要具备灵活的拓展性,就要站在理论的高度去进行架构设计,比如现在工作流概念逐步流行,因为我们具体很多实践项目中都有工作流的影子,工作流中有一个树形结构权限设定的概念就对很多领域比较通用。

树形结构是组织信息的基本形式,我们现在看到的网站或者ERP前台都是以树形菜单来组织功能的,那么我们在进行架构设计时,就可以将树形结构和功能分开设计,他们之间联系可以通过树形结构的节点link在一起,就象我们可以在圣诞树的树枝上挂各种小礼品一样,这些小礼品就是我们要实现的各种功能。

有了这个概念,通常比较难实现的用户级别权限控制也有了思路,将具体用户或组也是和树形结构的节点link在一起,这样就间接实现了用户对相应功能的权限控制,有了这样的基本设计方案的架构无疑具备很灵活的拓展性。

 无双 回复于:2003-08-13 20:04:35
好的设计肯定需要经过反复修改,从简单到复杂的循环测试是保证设计正确的一个好办法 


没有完美的设计
所以只要能达到一定要求后就可以了

我觉得好的设计是随着设计者经验的增加而增加的

 RealArthur 回复于:2003-08-14 10:28:25
是啊,所以我们现在大多数的设计开始都可以去参考一些现有的模式,了解相关产品、项目的架构,理解成熟的设计模式,结合实际选取你需要的,由简单到复杂过反复修改验证,没有完美,实际中也不要去追求完美,只要能达到一定要求后就可以了 。
这其中,系统分析、设计师的经验是很重要的!

 无双 回复于:2003-08-14 13:15:29
所以软件是不断进化的
而不是一下子就OK了 这是与建筑的不同

也就是演进模型存在的必要性

 只爱红酒 回复于:2003-08-19 19:28:36
软件结构的发展是随着计算机系统深入社会生活,不断深入解决社会问题而不断演进的。

上世纪四十年代,计算机主要处理大规模数学计算,那时的软件和纸带、磁带等流介质紧密结合,软件也是流式的,甚至是工程化的,不可重用的。

此后,用于解决事物问题的和更多交互的应用产生了,模块化设计,自顶向下分析应运而生。

随着应用软件的社会化明显,共用代码的角色不断复杂,OO技术得到发展,同时随着运算量增大,运算分布成为主要课题,C/S软件结构成为组建分布式运算的主要方式。

由于分布式运算的需要,更主要的是系统级资源共享,对象的重用能力得到重视,基于框架和对象的应用结构产生,服务式对象调用标准被制定CORBA、COM等出现,此时的系统结构已经不仅是满足应用系统对社会的需求,而应用系统已经是社会的一部分,应用系统要实现自身的完备。

而今天,随着Internet对人类社会的巨大影响,应用体系的Internet化、跨平台能力、接口标准化成为在Internet世界畅行无阻的根本能力,B/S结构成为应用主流。而浏览器的发展史证明,此时标准的制订更为重要,由一个公司制订的J2EE标准成为多方的宠儿,行业认同更促进标准化制订的成功,可以看出J2EE不是唯一的对象式分布运算结构,但由于标准的健全,它可能是最成功的一个。

可以看到信息系统如今不仅适应社会,还影响社会,成为社会的部分,并在为社会和自身的同时完善进行努力。

如同生产力和生产关系的关系,软件结构是随着社会信息化的发展而发展的,不同的软件结构适合不同的社会应用水平,如同不同的生产关系适合不同的生产力水平一样,不能简单的以好坏、先进/落后判定,只有适用和不适用。设想用J2EE结构设计一个导弹弹头内的制导程序就是麻烦透顶了,甚至运行效率还有问题。 

 无双 回复于:2003-08-19 19:44:37
楼上的总结很有深度啊 总结了软件各阶段的发展
很高兴能看到这样的发言
看到软件以后的发展方向

 无双 回复于:2003-08-19 19:51:59
我觉得早期是过程语言的原因也是想依照那时工作流水线形式的
并且是机器语言 

想使用OO是不可能的

后来系统的复杂和需求变化很快使OO设计出现 在这个方面过程式设计不能满足要求

再后来随着网络的发展
大家对电脑的分工明确了

会使用专门的电脑解决专门的问题
所以这时C/S B/S开始出现 想想以前学习的foxpro可以用来做一个工资管理系统或是数据库系统 并且数据库引擎与程序结合在一起
但现在一般都是使用专门数据库 客户也是专门的客户端

再以后 应该是软件无处不在的时候 每一个软件都会和其它系统上的软件互相通信 由于厂家广泛 所以接口标准的制定就决定了自己的竞争地位 很多标准都是公开的 但为什么还有那么多厂家参与呢
因为他们希望自己能在竞争中掌握主动权

以后的软件应该是使用统一接口开发 实现plug &play的时候 也就是随便把其它厂家软件拿下来也可以运行 

这是我想的

也想看看大家对这的看法

 无双 回复于:2003-08-19 20:15:19
B/S一般用于广域网或是INTERNET上

但是由于开放
我想在安全方面不好控制
还有就是性能

所以特定部分或是区域使用的软件还应该还是C/S

 只爱红酒 回复于:2003-08-19 20:09:45
从现在能看到的苗头,软件结构的发展将逐渐实现服务标准化,Web services技术可能将是未来的发展热点。

 无双 回复于:2003-08-19 20:15:52
主要是因为web都是以明文传送的

所以不是很安全

 只爱红酒 回复于:2003-08-19 20:34:39
在当今的网络世界安全问题已经得到了较好的改善:

轻量级的是SSL技术,可以实现网络数据的传输加密。
另外,在网络传输中也可以采用三层VPN的IPSec技术,可以实现信道加密。
在高端领域可以采用专业密码机,采取链路层加密,保密能力已经很强了。
在密码方面,目前普遍采用国际通用PKI/PMI体系,经过数学的论证,没有密钥情况下解密(以目前计算机能力)时间为数十亿年,因此这方面也是安全的。
当然这些技术需要投资,因此也只针对需要保密的专向业务。

另一方面,在广域范畴内,网络传输质量还是制约网络应用的问题,不过这对于B/S和C/S(远距离)技术是没有分别的,因此,网络的QoS保证技术得到发展,目前还只是在起步。

最后就是安全的管理,不过这是针对整个信息系统而言的,安全的管理密码,防止对信息系统软、硬件遭到恶意破坏,是社会问题是管理机构、管理水平、管理素质共同提高才能实现的。

 无双 回复于:2003-08-19 20:57:03
学习到了很多

但是性能方面

如果是相同应用的话 使用WEB结构性能要求会比C/S结构高
当然WEB使用方便界面直观 不用专门的客户端

还有就是WEB开发复杂应用比较难 开发周期与C/S相比比较长 所以我觉得C/S以后在一段时间内还是会存在的 只是现在WEB的发展势头很强大 很多传统的C/S应用都已被WEB应用代替了 能与它抗衡的看来只是java开发的c/s了(有跨平台特点 并可以实现比较复杂的应用)

 只爱红酒 回复于:2003-08-19 21:19:15
应用系统的性能只是暂时的,要知道硬件系统的摩尔定律还没打破。
提高硬件水平简单、效果显著也便宜。

大家可能体会不到几年前我使用java的痛苦经历——那叫一个慢,几乎不能用,但几年后的今天大不同了。

我不排挤C/S软件,其实我很喜欢他们,他们技术性很强,一切尽在掌握,直接、快捷,阻碍C/S发展的不是B/S,而是应用系统集成(EAI)的需要,信息系统的自我完善必将发展到系统互联,信息共享,这一点不开放的C/S暴露出了它的弱势。

还是我前面说的,没有更好的,只有更适合的。不管中国还是世界,大量C/S结构的系统都在它们适合的业务上很好的运行着,如果业务稳定,我相信它们还会很好的运行下去,就象导弹的制导程序一样,不管导弹的执导精度再提高几倍,它还会使用机器码(汇编)研制。 

 无双 回复于:2003-08-19 21:42:03
没有更好的,只有更适合的 这句话用在哪里都正确
但是在很多时候 如果两个技术都可以实现时 优先考虑的是流行技术
因为这会有卖点

反观中国程序员的发展也可以看出这一点
一旦MS有什么新的技术或是动向就开始跟风 老的也没有研究透
所以到现在很多都是开发应用的东西

不过这好像跑题了ops:

要是有时间的话一起讨论一下每种架构的优缺点这更好

 只爱红酒 回复于:2003-08-19 21:52:47
好改天一定奉陪,不过今天我的肚子呱呱叫了。

 threehair 回复于:2003-08-20 08:01:48
   期待你们的讨论!

 一无所有 回复于:2003-08-20 17:05:16
好与不好总是相对的,
    大家都有看过猴子为了西瓜,丢掉玉米,。。。

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