閱讀筆記16

軟件架構爲什麼重要

架構扮演着系統骨架的角色架構

  不管開發者是否有意選擇架構,全部系統皆有架構!骨架做爲架構的隱喻,雖有不足,卻頗有用。骨架給動物提供了總體結構,以支撐其行動。spa

  鳥的骨架善飛、袋鼠的骨架善跳,徹底得益於它們的骨架。設計

  除非你說跳比飛好,不然就不能說一種骨架優於另外一種骨架。你能夠說一種骨架是否很好得適合其功能,例如,要讓袋鼠的骨架適於飛翔,勢必要大費周章!軟件亦是如此!繼承

  之因此說骨架的隱喻存在不足,是由於架構並不只僅是那些外部可見的主體部分(即骨骼),某些不可見部分(如約束)一般更重要。例如鎖策略、內存管理策略或者繼承第三方組件的技術,均可以是架構的一部分,而在運行時,這些都不可見。內存

架構影響質量屬性開發

  質量屬性是外部可見的!開發者必須關注其軟件作了什麼,即軟件的功能。開發者必須重視質量屬性需求!內存管理

  儘管人和馬的骨架都支持運輸蘋果到市場的功能,但在運輸效率和數量上卻相去甚遠!選擇架構使得系統能實現,這不難,但在知足質量屬性方面,有的選擇時事半功倍,有的則會事倍功半!系統架構

  質量屬性的演化會迫使系統產生劇變。不少時候,質量屬性變化太大,要想不改變架構,幾乎不可能作到!class

架構與功能(基本上)是正交的效率

  同一個系統裏,通常狀況下,系統的架構和功能應該是匹配的,一旦匹配欠佳,開發者就要努力克服,通常來講,這是很是費勁的!

  沒有最佳架構,就像動物的骨骼同樣,要是袋鼠有鳥兒中空的骨骼,則很容易折斷。鳥兒要有強壯的雙腿,那飛起來就會像鴕鳥同樣笨拙。

  另外一方面,可能選一個骨架,並迫使其在不適宜的環境下工做,例如魚能夠在水裏呼吸,哺乳動物則不能,然而儘管鯨屬於哺乳動物,卻能夠打破這一約束而生活在水裏,雖然要費些周折。

  重要的是要認識到架構與功能能夠互相混合,取長補短!能夠修改系統的架構而功能不變,也可讓不一樣的功能用同一套架構。

  糟糕的架構決策老是會給功能與質量屬性的實現帶來障礙!一旦架構選擇失當,開發者就會舉步維艱!

架構是對系統的約束

  架構是對系統恰如其分地施加約束,以便系統得到咱們所需質量屬性的一門藝術!

  任何架構皆有約束,這些約束常常被視爲絆腳石!其實約束能夠起到導軌、指南針的做用!不少約束是有利於維護整個系統的!

  系統不作什麼與系統能作什麼同等重要!要確保系統具有特定的質量屬性,就必須施加約束!

約束有好些好處:

1.提現判斷 

  約束有助於知識在開發者之間傳遞,便於達成共識!

2 促進概念完整性 

  運用一個始終如一的好主意賽過幾個散佈於系統各處的奇思妙想!

3 下降複雜度

  做爲概念完整性的必然結果,約束能夠化繁爲簡,從而使得構建的系統具備顯而易見的基本原則!

  沒有約束的系統則可能以任意不一樣的方式在不一樣的地方去完成相似的工做,從而影響對系統的理解,約束提供了明確的作法,能夠砍掉此類複雜性!

4理解運行時行爲

  雖然能夠直接審查代碼,但卻難以預測其運行時行爲。

  你能夠編寫出晦澀難懂的代碼,使其運行時使人費解。抑或對其加以約束,從而使其運行時行爲變的顯而易見!

  離開了約束,設計就無從談起!有些約束可能存在使用不當的狀況發生,然而離開了約束,設計就無從談起。由於約束可使混亂歸於井井有理,而這種混亂剛好是工程師的大敵。必須妥善地對系統施加約束,而不能全盤否認!

  對系統架構的設計就是對決策進行推敲與取捨,判斷什麼該作,什麼不應作。

  任何對於施加約束的猶疑不定都不會來自對他們的明智使用,而是來自其餘人的草率、無知的濫用約束方式!!!

相關文章
相關標籤/搜索