詳細介紹軟件架構設計的三個維度

架構設計是一個很是大的話題,無論寫幾篇文章,接觸到的始終只是冰山一角,更多的是實踐中去體會。這篇文章主要介紹面向對象OO、面向方面AOP和麪向服務SOA這三個要素在架構設計中的位置與做用。 編程

架構設計有三個維度,或者說是咱們在考慮架構時須要思考三個方向。設計模式

這三個維度分別爲面向對象、面向方面、面向服務。架構

這三個維度能夠看做是正交的,但不一樣維度會互相印證,互相支撐,整個架構的示意圖如圖所示。url

面向對象.net

面向對象技術最初是從面向對象的程序設計開始的,它的出現以上世紀60年代Simula語言爲標誌,並在Smalltalk語言的完善和標準化過程當中獲得更多的擴展和對之前思想的從新註解。 架構設計

上世紀80年代中後期,面向對象程序設計逐漸成熟,被計算機界理解和接受,人們又開始進一步考慮面向對象的開發問題。直到如今,面向對象已經成爲一種很是流行的編程方式,以及軟件設計的架構。 設計

面向對象提出有三個主要目標:重用性、靈活性和擴展性,強調對象的「抽象」、「封裝」、「繼承」和「多態」。它能讓人們以更加接近於現實世界的方式來思考程序,這點能夠說是面向對象最大的進步。 對象

在OO思想的運用上,業界出現了不少好的經驗與技巧,從而涌現出大量的設計模式,能夠說面向對象是系統分析與設計時的一個很重要的方面。 blog

面向方面
繼承

面向方面最初來源於hook技術,本質上就是知足擴展的需求,能夠在程序中自由擴展功能。 

面向方面不只僅是一門編程技術,一樣也是一種架構設計的思路。若是說OO是縱向地分析、切割整個系統,那麼能夠認爲AOP是橫向地對系統做切片。

簡單地理解,OO與AOP分別從兩個不一樣的角度給咱們提供了分析系統的思路。面向方面能夠彌補面向對象的缺陷,兩種方式有機的結合在一塊兒,能夠更加有效地對系統進行分析。 

咱們認爲OO是接近於人類認識天然的思惟方式,但對於東方而言卻並不必定是這樣的。

當西方人看到一個複雜系統的時候,只會有一種思路,就是「分解」,將系統分解成一塊一塊,而後每一個部分進行研究。

當東方人看到一個複雜系統的時候,更多地會關注系統中存在的關係,將系統做爲一個有機的總體進行研究,這也是東方和西方在事物見解上存在的差別。 

這兩種思惟方式都沒有問題,若是結合起來分析問題,解決問題會更好。面向對象與面向方面也一樣如此,都能對應到人類認識天然的思惟方式上。

面向服務

面向服務能夠說是最近炒得比較火熱的概念。包括如今提到的SaaS(Software as a service),軟件即服務。準確而言,面向服務不只僅是軟件行業的概念,這個要從社會的產業結構提及。 

社會產業總共分爲三個,第一產業農業,第二產業工業,第三產業服務業。最先社會的主要產業是第一產業農業,將近有幾萬年的歷史。

十八世紀下半葉在英國開始的工業革命,對人們的生活產生了根本性的影響,社會的主要產業成了第二產業工業。
如今仍然屬於工業時代,或者有人說的「後工業時代」。而在後工業時代,社會的經濟體制一定要向第三產業服務業逐漸轉型。面向服務實際上是社會經濟體制重心的一種遷移。 

仍是說回到軟件行業,社會的主要產業將轉變成服務業,天然軟件行業也會出現對應的變化,那就是這裏提到的面向服務。面向服務從此會影響到軟件的交付模式,會對整個軟件行業的體制產生影響。

而說到架構層面,面向服務是系統發佈功能的一種方式。而且基於這種方式下不一樣的系統之間能有效地通訊、協做。常見的實現技術就是Web Service。

軟件全局觀

軟件架構設計的三個維度:面向對象、面向方面、面向服務。

最年長的一個維度就是面向對象,發展了好幾十年,也是相對而言比較成熟的一個維度。它解決的問題是系統內部結構的設計。
面向方面思想的提出可以彌補面向對象的缺陷。面向對象的方式不能實現橫切關注點的分離,而面向方面正是爲了解決這個問題。面向方面與面向對象同樣都是解決系統內部結構的設計。

面向服務更多的是涉及到系統的外部,簡單地說就是發佈功能。它並不關注系統內部結構的實現,因此說面向服務與面向對象或者面向方面並不衝突。

這三個維度並非絕對孤立的,它們之間會互相影響、制約,相互發展的。咱們在分析架構的時候須要同時考慮到這三個維度的問題,這樣有助於咱們設計出更加優秀的架構。

但願經過本文的介紹,可以給你帶來幫助。

相關文章
相關標籤/搜索