代码改变世界

【转】软件架构

2011-08-16 14:31  coderidea  阅读(478)  评论(0编辑  收藏  举报

实强调软件架构的最主要的目的有3个:
重用:人们希望系统能够重用以前的代码和设计,从而提高开发效率;
扩展:人们希望在系统能够保持结构的稳定的前提下很容易地扩充功能和性能,希望能够“以静制动“;
简洁:常言道,简洁就是美,好的架构一定易于理解,易于学习,易于维护,人们希望能够通过一个简洁的架构来把握系统;

什么是软件架构:

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/mar06/eeles/index.html

架构一词是舶来品,是architecture的中文翻译, 其英文的本意是来源于建筑行业的建筑艺术、建筑(风格)和结构,引入到软件领域里面来以后,并没有一个统一的定义。
买过房子的人都知道5层以下的楼房一般是砖混结构,而高层和小高层的楼房都是框架结构,楼层越高对结构要求越高。软件也是一样,系统越庞大,生命周期越长,结构的重要性就越明显。因此,随着人们对软件工程的深刻理解,将架构进行充分的强调是很自然的,正如人们越来越强调系统的需求分析,从而有了领域工程师和领域专家的概念一样。

软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
架构是在组件,彼此间和与环境间关系,引导设计发展原则中体现的系统的基本结构。[IEEE 1471]
一个架构关注于结构和行为,仅关注于重要决定,可以与架构风格一致,受涉众和环境的影响,体现基于原因的决定。

有许许多多种架构,最著名的是与建筑和其他工程相关的。甚至在软件工程领域,我们经常会遇到不同形式的架构。例如,除了软件构架的概念,我们会遇到诸如企业架构,系统架构,组织架构,信息架构,硬件架构,应用架构,基础设施架构等。你会见到其他类型的,每种类型都定义了一个架构的具体范围。


软件构架师的特点:

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/apr06/eeles/index.html
[构架师是]负责系统构架的人,团队或者组织。
1、软件构架师是技术主管,这意味着除了他要有技术上的技能外,还要有很好的领导才能。构架师的领导能力在团队中和项目质量控制中起着十分重要的作用。
2、架构师可能是由一个小组来完成的,需要有一个人作为这些构架师的领导,他要拥有整体的前景,并且需要调节构架师小组之间的问题。无论构架师的角色被一个人还是一个小组担当,他们背后都有"值得信赖的顾问"的支持。他们可以通过和其他构架师协同工作来弥补自身在某些技术方面的不足。
3、软件架构师应该理解软件开发过程
4、软件架构师应该有商业领域的知识
5、软件架构师应该有技术知识
6、软件架构师应该有很好的设计技巧
7、软件架构师应该有很好的程序设计技巧
8、架构师是一个很好的沟通员
9、架构师需要做出决策
10、架构师需要觉察组织的决策
11、架构师是一个谈判代表

软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。对一些大型软件产品或项目的开发,这一角色显得很关键,因为缺乏好的软件架构师而导致项目失败的例子不胜枚举,一个没有经验和能力的软件架构师也会使软件项目失败的速度加快。正因如此,Martin Fowler指出:架构师是对所有重要事情做出决定的人。
软件架构的过程:

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/may06/eeles/

进行软件架构设计的益处:http://www.ibm.com/developerworks/cn/rational/rationaledge/content/jun06/eeles/
1、架构设计能够满足系统的品质
2、架构设计使我们达成一致的目标
3、架构设计能够支持计划编制过程
4、架构设计可以推动体系架构的完整性
5、架构设计能够有效地管理复杂性
6、架构设计为复用奠定了基础
7、架构设计能够降低维护费用
8、架构设计能够支持冲突分析