架构之美读后感
《架構之美》讀后感
唐凱風
2014301500366
架構是系統設計的一部分,它突出了某些細節,并通過抽象省略掉了另一些細節。軟件系統的架構包括行為上的和結構上的。外部行為描述展示了軟件如何與用戶、其他設備和外部設備進行交互,也就是需求。結構描述展示了軟件如何被劃分為多個部分,以及這些部分的關系。
架構的設計受到許多因素的制約,架構是好是壞并沒有統一的標準。這取決于人們對軟件的需求、軟件被構建和運行的環境,以及軟件團隊本身的特點等等因素。評價軟件好壞有很多指標,例如性能、安全、可伸展性等等。一般來說,這些指標是很難全部滿足的,試圖改進其中一個往往會對其他指標產生負面影響。所以從某種意義上來說,軟件架構是折中的游戲。對于一組功能需求和品質需求,沒有唯一的正確架構。
《架構之美》沒有太多空洞的概念和論述,而是拋磚引玉地展示多個實際的項目。通過對它們架構利弊的分析,以及相關的思考,給讀者提供了有益的啟發
書中提到了很多有關一個優秀的架構師應該具備的品質很吸引我的眼球,好的架構師首先關注的并不是系統的功能而是系統需要滿足的品質,它指明了功能以何種方式交付才能被系統的利益相關者普遍接受,系統的結果包含了這些stakeholders的既定利益。成功的架構師的兩項重要實踐是:讓利益相關者參與和同時關注系統的功能的品質和功能。
書中介紹了什么樣的的架構才算是美麗的架構,美麗的架構在開始時,要關注其實用性,好的架構應該是每天被很多人使用的;使用架構之前,我們還要考慮它必須要能夠被構建(可構建性);接下來就是關注架構的可持久性,好的架構應該能夠經得起時間的考驗,能夠考慮到未來的變更,允許期望的修改;最后,要尋找一些能讓人高興的架構(開發人員、測試人員、用戶等),這就要求架構必須滿足概念完整性,這樣的架構才易懂,易用,才會做到簡單而又不過于簡單。幾個比較常見的美麗架構的例子有:A-7E艦載飛行處理器的架構;朗訊5ESS電話交換機軟件架構;萬維網;UNIX系統。
在后來的章節中,又介紹了“混亂大都市”和“設計之城”兩個項目,將兩種比較,形象的說出了好的架構與差的架構的一些特性。“混亂大都市”的最大問題是重復,它沒有考慮好軟件設計中最關鍵的品質,內聚和耦合。它的失敗經驗很值得我們借鑒:缺乏預見性和對架構的整體思考。版本的發布周期過于漫長;系統沒有彈性,可擴展性差;代碼問題很嚴重,沒有統一的命名規則和命名結構,導致新員工面對復雜的代碼結構,感覺壓力比較大,從而又造成了員工的跳槽和士氣低等問題;團隊的內部政治問題嚴重,沒有團結精神,缺少凝聚力。
?相比之下,“設計之城”的成功就是吸取了它的經驗教訓,從一開始,項目的目標就很明確,在以后的開發過程中的代碼必須支持所設定的要完成的功能,這樣就形成了一個通用的目標的代碼集,在以后的使用過程中可以適用于很多產品的配置。開發團隊動態的遵守架構設計,開發人員們密切合作,共同創建一組干凈、一致、密切合作的軟件。如何Conway法則中所說的,團隊的組織方式也如同軟件的組織方式;堅持保持品質的信念;
要有單元測試和很好的自動化測試。它的里面提到了一個新的原則:YAGNI(You Aren’t Going To Need It)即在你不需要他的時候,不要急著先去設計它。這大大提高了架構的品質,在設計之初只是設計系統中最重要的部分,余下的部分延遲到需要的時候再進行分析和設計,這樣可以很好的解放思想。
?一個好的架構的形成不僅是架構師的功勞,還有團隊的集體合作,主要因素:確實進行有意為之的前端設計;設計者有很好的素質和經驗;在開發過程中,保持清晰的設計觀點;授權團隊負責軟件的整體設計;不要害怕改變設計;讓合適的人加入到團隊中,讓團隊保持健康的工作關系;在合適的時候做出決定;好的項目管理和合適的最后期限。
在后來介紹架構伸縮性的時候以常見的在線游戲的設計為例,這類軟件對系統的伸縮性要求很高,要能實時伸縮,減少延時。隨即提出了兩種解決方案:分區和基于地理位置,每個地理區域的玩家運行在一臺服務器上。
??? 在介紹數據增長對架構影響的時候以以Facebook為例,說明了Facebook的獨特平臺是如何解決了數據迅速增長的情況下系統的架構是如何維持穩定的。Facebook的獨特平臺主要是有一下幾個部分組成的:
Facebook API是為了實現通過一個外部可以訪問的Web服務來提供Facebook數據,實現應用可以利用在Facebook上的用戶社會關系數據,但是不能直接訪問。
Facebook的FQL的提出是為了解決從其平臺API獲取數據比獲取內部數據的開銷大得多的問題,FQL提供的是一種查詢服務。類似內部數據采用的模式,實現外部數據訪問模式。它能讓開發者更快的處理它的請求,能夠以比API更好的力度來訪問數據,同時保持了SQL類似的語法。
FBML的提出時基于這樣一個實際問題:對于社會關系應用來說,要獲得引人注目的關鍵性用戶數,支持它的社會關系網絡上的用戶必須要能注意到其他用戶在利用這些應用進行交互;外部應用不能夠使用Facebook沒有通過Web服務暴露出來的哪些核心數據元素。FBML是一種數據驅動的標記語言,在社會關系站點上創建應用執行和顯示的內容,讓用戶在一個受信任的環境下操作。
轉載于:https://www.cnblogs.com/tangkaifeng/p/5615205.html
總結
- 上一篇: 获取当前屏幕显示的viewcontrol
- 下一篇: AJax 三级联动