读架构之美
???? 自開始寫代碼起,就開始聽說“架構”這個詞,一直沒有深究其中的含義,近來翻起《架構之美》這本書,想想談起架構有些問題是接踵而來。
???? 第一、什么是架構
????????架構是一個過程,而非結果。架構是一個持續該井的過程。架構的最終產出物是一張圖?。一張引導實施的圖;一張目標系統的圖。
??????? 架構通常體現為一組結構。
????????每種結構都由各種類型的組件及其關系構成。組件可以是建筑中的支架橫梁,也可以是內部腔室。
????????每個學科都有自己的一套組件和組件間的相互關系。
??????? 每一種結構都是為了幫助我們理解如何來滿足特定的關注點,展示關注點是如何被滿足的。同樣也展示某些關注點被滿足時,是如何影響到其他關注點被滿足的。
??????????架構還體現為一組行為。
??????????行為又可分為外部行為和內部行為,外部行為展示了系統如何與用戶、其他系統之間的交互。內部行為體現為組件之間的交互接口。?????
?
???? 第二、怎樣的架構才算是一個美麗的架構
???????????美麗至簡,精益并且是不斷演進式發展。精益在于避免過度設計,同樣使得架構能不斷演進。無論是一個大規模的電信網絡管理系統、大規模應用的互聯網架構還是企業級的ERP系統,很多時候不可能一開始就設計出最完美的解決方案。系統應該隨著規模的變化,不斷演進。這樣的系統才是科學的、經濟的。
?
??????????架構之美體現在關注點的分離和結合。在軟件設計中,我們需要考慮多方面的關注點,漂亮的架構就是讓這些關注點盡可能分離,然后以最簡單的方式結合,從而得到高內聚、低耦合的系統。?
?
????????? 架構之美還在于解決實際問題,它既是藝術的也是生活的。從藝術的角度說,美是創造矛盾并解決矛盾。架構的多關注點和表達的簡潔性是一種矛盾,而架構之美就在于解決了這個矛盾。
??????????
???????????架構的評估方式一般有幾種
????????? A、確定架構屬性,通過建?;蛘吣M系統的一個或者多個方面。
????????????? 如,通過性能建模來評估系統的吞吐量和伸縮性;通過失效樹模型來評估系統的可靠性和可訪問性,還有復雜性和耦合性指標,可用于評估可變性和可維護性。
????????? B、通過對架構師的質詢來評估架構。
????????????? 有許多結構化的質詢方法,通過組織內的專家或者一些領域專家的質詢來評估架構。?
??????????C、架構折中分析法。
??????????????這是質詢評估法的變體,它通過尋找架構中不能滿足品質關注點的風險來評估架構。使用特定場景分析,每種場景描述特定利益相關人對系統的品質關注點。然后由架構師來解釋如何支持每一種場景。
?
???? 第三、如何成就一個美麗的架構
?????????第一、要明確系統的關注點。
???????????????? 要明確系統需要考慮哪些關注點、哪些關注點是需要重點考慮的關注點。沒有一個系統能夠完美地滿足所有關注點,對其中一個關注點的完美滿足就是對另外一個關注點的不完美滿足,所以架構是一種折中,一種針對特定系統重要關注點的折中滿足。發現特定系統中的重要關注點,以及滿足這些關注點的條件,是我們取得架構的方法。
???????????????? 另外,項目中的不同群體對系統有不同的關注點。如
???????????????? 投資人:他們關注的是項目是否可以在給定的資源和進度約束下完成。
???????????????? 架構師、開發人員、測試人員:他們關注的是系統最初的構建和以后的維護、演進。
?????????????????項目經理:他們關注的是如何組織團隊,指定迭代計劃。
???????????????? 客戶:關心的是所有關注點是否得到了合適的滿足。
???????????????? 與相關利益群體溝通、明確這些關注點和約束,并為他們排列優先級。
???????? 第二、是一組要遵循的規則。
??????????????? 這組規則有助于消除復雜性,并可以用于指導詳細設計和系統驗證。設計規則可能表現為特定的抽象,這些抽象總是以同樣的方式使用;設計規則還表現為一種模式,如管道模式和過濾器模式,在系統中處處使用相同的設計原則,設計概念具備完整性,一個好的架構反應的是一組設計思想,而不是很多好的思想,這些思想之間卻彼此獨立不協調。設計規則還體現在符合法規和安全性的要求。
?????????第三、 確保設計概念在實現時得到一致體現。
???????? 第四、好的架構來自于更好的架構師提供的現場指導。原因在于一些關注點是很多系統的共性
???????????????? 1、功能性
???????????????????? 產品向他的用戶提供哪些功能
?????????????????2、可變性
????????????????????? 軟件將來可能要哪些改變,哪些變化不可能發生改變,不需要特別容易做這些改變
???????????????? 3、性能
????????????????????? 產品將達到怎樣的性能
?????????????????4、容量
????????????????????? 多少用戶將并發使用該系統?該系統為多少用戶保存數據?
???????????????? 5、生態系統
?????????????????????在部署的生態環境中,該系統與其他系統進行哪些交互?
???????????????? 6、模塊化
?????????????????????如何將編寫軟件的任務分解為工作指派?特別是這些模塊如何進行獨立開發?并能夠準確而容易地滿足彼此的需要。
???????????????? 7、可構建性
?????????????????????如何將軟件構建為一組組件。并能夠獨立實現和驗證這些組件?哪些組件應該復用其他的產品?哪些應該從外部供應商處獲得?
?????????????????8、產品化
???????????????????? 如果產品將以幾種變體的形式存在,如何開發一個產品線?并利用這些變體的共性?產品線中的產品以怎么樣的步驟開發?是否可以開發最小的產品,然后再添加、擴展組件。在不改變以前編寫的代碼情況下,開發產品線的其他成員?
???????????????? 9、安全性???
?????????????????????產品是否需要用戶認證?數據的安全性如何得到保障?如何抵擋外來的攻擊??
?
???? 最后想說的是,架構之路并不平坦,需要我們不斷探索,不斷實踐。在自己的成長之路上,每一滴汗水才是自己成長的記號?!督饎偨洝吩?#xff1a;“一切圣賢皆,以無為法而有差別”。
?
?
?
總結
- 上一篇: TCP/IP路由协议-BGPOSPF路由
- 下一篇: 推荐丨t.cn/…、dwz.cn/…、u