1.2 正确理解设计的含义
虽然我们常常把“架构”和“设计”放在一起,总称为“架构设计”,其实从严格的意义上来说,“架构”和“设计”是两个概念,这里不是故意玩文字的游戏,而是两者的关注点确实是不一样的。
1.2.1 设计的重要性
设计主要是指一个思考和求证的过程。在这个思考的过程中,针对某个需要解决的问题,提出一些可行方案,同时给出相应的计划。
一般来说,软件就是用来解决某个问题的,因为这个问题比较大,或者比较复杂,所以往往不得不分解,“分而治之”。大的问题不断被分解,最终成为一个个可以解决的小问题。设计指明了如何解决一个个的问题,并提出了方案和计划,只有这样,才能最后确保整个软件的问题被解决,也才能确保软件按照计划来进行。
1.2.2 架构和设计的关系
正如之前所说,架构和设计是两个不同的概念,它们也出现在不同的阶段。当软件系统的架构确定之后,设计就开始了。
架构与系统的业务需求往往是紧密联系的,理论上来说,架构不是很关注系统最后搭建在哪个技术平台上(例如:或是J2EE上,或是.NET上),但实际上,很多时候我们在考虑架构创建的同时,也考虑了系统将要运行的技术平台。
设计是与系统的实现相关的。设计将架构所关注的那些高层抽象的需求与具体的技术实现联系起来,从而考虑如何实现系统所需要的稳定性、安全性,甚至是考虑采用哪种模式等。在设计阶段,还要决定在以后开发的过程中应采用哪种实现方法论进行开发(例如,是TDD,还是DDD或是BDD等)。
用一张图来说明架构和设计的相互关系,如图1-5所示。
图1-5 架构与设计的关系图
在图1-5中,业务需求是系统架构的决定性因素,软件设计和开发在架构确定之后开始进行,而开发过程又是在设计的基础上进行的。
为了进一步说明架构和设计的关系,加深读者的理解,下面就以一个汽车制造的例子类比阐述之。
汽车厂的机械工程师(可以理解为机车行业的架构师)为一款新型的汽车设计了一个蓝图,我们可以将这个蓝图理解为机械工程师为汽车创建的架构。在这个蓝图中,包含了一些高层抽象的需求:
q 汽车的规格、大小和各个组成部分。
q 汽车引擎的容量。
q 汽车的类型。
q 最大的承载能力。
机械工程师在蓝图中标明了设计和生产汽车所需要的一些环境,同时也包含了一些约束条件,例如生产汽车的预算和时间期限等。但是在蓝图中没有包含设计引擎的细节,也不包含会使用什么样的钢材,使用什么的轮胎等。而这些都将会由汽车设计工程师来决定,这些工程师基于公司现有的生产能力和技术来选择最佳的策略,以确保他们的选择可以实现蓝图的需求。
汽车的生产流水线将会按照汽车工程师的设计和指定的技术来进行,这个过程将包含轧钢、选材、选择合适的生产设备、组装各个零部件,烘烤油漆,安全测试等。
图1-6把汽车的生产过程和软件开发过程做了个对比映射。
图1-6 工业生产与软件开发对比图
在设计过程中,有时候一个架构蓝图有多个可行的实现方案,而这些方案又各有利弊,那么设计人员必须在满足蓝图需求的前提下,选择尽可能地满足系统相关利益人关注点的方案。如图1-7所示。
图1-7 架构蓝图实现
本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/749112
,如需转载请自行联系原作者