1.1 何为软件架构
过去,很多系统在软件开发过程中没有进行架构设计,却依然被开发出来了,并且运行了多年。那么今天,我们在开发软件的时候是不是必须要设计架构呢?架构设计与其他的概要设计、详细设计有什么不同?没有架构设计会怎么样?
早期的很多软件开发普遍没有架构设计,那是因为早期的软件系统规模都比较小。而随着软件产业的不断发展,软件规模越来越大,软件系统变得越来越复杂,架构设计就变得越来越重要。这就好比我们要在农村盖一间二层楼的房子,有必要请一位建筑师来进行建筑设计吗?直接砌砖就可以了。但如果我们要盖的是一栋几十层的高楼,直接砌砖可以吗?这样盖不了几层楼层就会倒塌。在建设高楼大厦之前,建筑师要提前勘测地质,确定地基要打多深;要设计水电如何走线;还要确定这些水电如何与周边的自来水厂、电力公司和排污系统对接。最后,也是最关键的,就是建筑师必须有风险意识。他必须要去分析建筑所在的地域有哪些自然灾害,未来可能会出现哪些需要提前应对的风险。譬如,上海第一高楼上海中心大厦(如图1-1所示)的外形给人一种“拧巴”的感觉,之所以有这样的设计,就是为了应对频繁的台风。
图1-1 上海中心大厦
与建筑设计类似,架构设计在一些小系统中的作用可能不那么明显。然而,随着系统的规模越来越大,架构设计的作用也越来越明显。在面对一个复杂系统的时候,架构师首先要做的就是规划,让系统中的各个部分相互协调,成为一个有机的整体。
此外,架构师还应当有强烈的风险意识,在整个架构设计过程中随时识别风险,应对风险。一个软件系统,特别是大规模的软件系统,必然要面对各种各样的风险。软件规模越大,面对的风险就越多。如果我们能越早识别风险,有针对性地去应对风险,那么我们付出的代价就越低。因此,架构师需要在软件设计的初期——架构设计阶段,就提前识别风险,制订相应的应对策略。只有提前解除这些风险,才能让软件平稳地开发,顺利地上线。所以,对风险的识别贯穿架构设计的各个环节。架构设计就是将这些风险一个一个地放到我们的项目中去考量,项目有怎样的风险,就应当在架构设计中制订怎样的规避方案。