架構設計 是一個非常大的話題,不管寫幾篇文章,接觸到的始終只是冰山一角,更多的是實踐中去體會。
??? 這篇文章主要介紹的是面向對象OO,面向方面AOP,面向服務SOA這三個要素在架構設計中的位置與作用。
??? 一、架構設計三個維度
??? 架構設計有三個維度,或者說是我們在考慮架構時需要思考的三個方向。分別為:面向對象、面向方面、面向服務。這三個維度可以看作是正交的,但不同維度會互相印證,互相支撐。
??? 整個架構的示意圖如下所示:
??? 二、面向對象
??? 面向對象技術最初是從面向對象的程序設計開始的,它的出現以60年代simula語言為標志,并在Smalltalk語言的完善和標準化過程中得到更多的 擴展和對以前的思想的重新注解。80年代中后期,面向對象程序設計逐漸成熟,被計算機界理解和接受,人們又開始進一步考慮面向對象的開發問題。直到現在, 面向對象已經成為一種非常流行的編程方式,以及軟件設計的架構。
??? 面向對象提出有三個主要目標:重用性、靈活性和擴展性,強調對象的“抽象”、“封裝”、“繼承”、“多態”。它能讓人們以更加接近于現實世界的方式來思考程序,這點可以說是面向對象最大的進步。
??? 在OO思想的運用上,業界出現了很多好的經驗與技巧,從而涌現出大量的設計模式。可以說面向對象是系統分析與設計時的一個很重要的方面。
??? 三、面向方面
??? 面向方面最初來源于hook技術,本質上就是滿足擴展的需求,可以在程序中自由擴展功能。
??? 面向方面不僅僅是一門編程技術,同樣也是一種架構設計的思路。如果說OO是縱向地分析、切割整個系統,那么可以認為AOP是橫向地對系統作切片。簡單地理 解,OO與AOP分別從兩個不同的角度給我們提供了分析系統的思路。面向方面可以彌補面向對象的缺陷,兩種方式有機的結合在一起可以更加有效地分析系統。
??? 我們認為OO是接近于人類認識自然的思維方式,但對于東方來說卻并不是這樣。當西方人看到一個復雜系統的時候,只會有一種思路,就是“分解”——將系統分 解成一塊一塊,然后每個部分作研究。當東方人看到一個復雜系統的時候,更多地會關注系統中存在的關系,將系統作為一個有機的整體進行研究。
??? 這兩種思維方式都沒有問題,結合起來的話分析問題解決問題會更好。面向對象與面向方面也同樣如此,都能對應到人類認識自然的思維方式上。不過 中國 人理解AOP可能會有不同的感悟——我寫的文章《讀易[13]·閑談中醫與AOP》有簡單的說明。
??? 四、面向服務
??? 面向服務可以說是最近炒得比較火的概念了。包括現在提到的SaaS——Software as a service,軟件即服務。準確說來,面向服務不僅僅是軟件行業的概念。這個要從社會的產業結構說起。
??? 社會產業總共分為三個,第一產業農業,第二產業工業,第三產業服務業。最早社會的主要產業是第一產業農業,將近有幾萬年的歷史。十八世紀下半葉在英國開始的工業革命,對人們的生活產生了根本性的影響,社會的主要產業成了第二產業工業。
??? 現在仍然屬于工業時代,或者有人說的“后工業時代”。而在后工業時代,社會的 經濟 體制必定要向第三產業服務業逐漸轉型。面向服務其實是社會經濟體制重心的一種遷移。
??? 還是說回到軟件行業,社會的主要產業將轉變成服務業,自然軟件行業也會出現對應的變化,那就是這里提到的面向服務。面向服務今后會影響到軟件的交付模式,會對整個軟件行業的體制產生影響。
??? 而說到架構層面,面向服務是系統發布功能的一種方式。并且基于這種方式下不同的系統之間能有效地通信、協作。常見的實現技術就是Web Service。
??? 五、軟件全局觀
??? 軟件架構設計的三個維度:面向對象、面向方面、面向服務。
??? 最年長的一個維度就是面向對象,發展了好幾十年,也是相對來說比較成熟的一個維度。它解決的問題是系統內部結構的設計。
??? 面向方面的思想提出來能夠彌補面向對象的缺陷。面向對象的方式不能實現橫切關注點的分離,而面向方面正是為了解決這個問題。面向方面與面向對象一樣都是解決系統內部結構的設計。
??? 面向服務更多的是涉及到系統的外部,簡單地說就是發布功能。它并不關注系統內部結構的實現,所以說面向服務與面向對象或者面向方面并不沖突。
??? 這三個維度并不是絕對孤立的,它們之間會互相影響、制約。我們在分析架構的時候需要同時考慮到這三個維度的問題。這樣有助于我們設計出更加優秀的架構。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
