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