软件架构为何如此重要?
架构扮演着系统骨架的角色
无论开发者是否有意选择架构,所有系统皆有架构!骨架作为架构的隐喻,虽有不足,却很有用。骨架给动物提供了整体结构,以支撑其行动。
鸟的骨架善飞、袋鼠的骨架善跳,完全得益于它们的骨架。
除非你说跳比飞好,否则就不能说一种骨架优于另一种骨架。你可以说一种骨架是否很好得适合其功能,例如,要让袋鼠的骨架适于飞翔,势必要大费周章!
软件亦是如此!
之所以说骨架的隐喻存在不足,是因为架构并不仅仅是那些外部可见的主体部分(即骨骼),某些不可见部分(如约束)通常更重要。例如锁策略、内存管理策略或者继承第三方组件的技术,都可以是架构的一部分,而在运行时,这些都不可见。
架构影响质量属性
质量属性是外部可见的!开发者必须关注其软件做了什么,即软件的功能。开发者必须重视质量属性需求!
尽管人和马的骨架都支持运输苹果到市场的功能,但在运输效率和数量上却相去甚远!选择架构使得系统能实现,这不难,但在满足质量属性方面,有的选择时事半功倍,有的则会事倍功半!
质量属性的演化会迫使系统产生剧变。很多时候,质量属性变化太大,要想不改变架构,几乎不可能做到!
架构与功能(基本上)是正交的
同一个系统里,一般情况下,系统的架构和功能应该是匹配的,一旦匹配欠佳,开发者就要努力克服,一般来说,这是非常费劲的!
没有最佳架构,就像动物的骨骼一样,要是袋鼠有鸟儿中空的骨骼,则很容易折断。鸟儿要有强壮的双腿,那飞起来就会像鸵鸟一样笨拙。
另一方面,可能选一个骨架,并迫使其在不适宜的环境下工作,例如鱼可以在水里呼吸,哺乳动物则不能,然而尽管鲸属于哺乳动物,却可以打破这一约束而生活在水里,虽然要费些周折。
重要的是要认识到架构与功能可以互相混合,取长补短!可以修改系统的架构而功能不变,也可以让不同的功能用同一套架构。
糟糕的架构决策总是会给功能与质量属性的实现带来障碍!一旦架构选择失当,开发者就会举步维艰!
架构是对系统的约束
架构是对系统恰如其分地施加约束,以便系统获得我们所需质量属性的一门艺术!
任何架构皆有约束,这些约束经常被视为绊脚石!其实约束可以起到导轨、指南针的作用!很多约束是有利于维护整个系统的!
系统不做什么与系统能做什么同等重要!要确保系统具备特定的质量属性,就必须施加约束!
约束有好些好处:
1提现判断
约束有助于知识在开发者之间传递,便于达成共识!
2 促进概念完整性
运用一个始终如一的好主意胜过几个散布于系统各处的奇思妙想!
3 降低复杂度
作为概念完整性的必然结果,约束可以化繁为简,从而使得构建的系统具有显而易见的基本原则!
没有约束的系统则可能以任意不同的方式在不同的地方去完成类似的工作,从而影响对系统的理解,约束提供了明确的做法,可以砍掉此类复杂性!
4理解运行时行为
虽然可以直接审查代码,但却难以预测其运行时行为。
你可以编写出晦涩难懂的代码,使其运行时令人费解。抑或对其加以约束,从而使其运行时行为变的显而易见!
离开了约束,设计就无从谈起!有些约束可能存在使用不当的情况发生,然而离开了约束,设计就无从谈起。因为约束可以使混乱归于井然有序,而这种混乱恰好是工程师的大敌。必须妥善地对系统施加约束,而不能全盘否定!
对系统架构的设计就是对决策进行推敲与取舍,判断什么该做,什么不该做。
任何对于施加约束的犹疑不定都不会来自对他们的明智使用,而是来自其他人的草率、无知的滥用约束方式!!!