如何理解AOP面向切面編程

開始編程

今天和你們聊聊AOP:面向切面編程思想。開始聊以前,先和你們一塊兒從編程思想的發展提及。設計模式

編程思想的發展歷程:架構

一、POP編程性能

首先,你們應該都知道,什麼是POP編程吧,就是面向過程編程。關於這個編程思想就不作介紹了。設計

從思惟上來說,面向過程更強調細節,忽視了總體性和邊界性。代理

典型表明是 C/C++的結構體。日誌

POP的不足:對象

代碼重用性低,不易擴展,維護起來難度大,耦合度比較高。繼承

 

二、OOP編程接口

面向對象編程,把事物對象化,對象包含屬性和方法,萬物皆對象。

當規模不大,面向過程編程就能夠了

最終實現業務,仍是得面向過程,按照過程,把業務串起來。 

OOP的形式:一個模塊由多個類組成,模塊又組成某個服務,多個服務組成一個系統

業務變動,須要修改代碼,類確定要發生改變

可是類應該是固定的,不該該頻繁被修改,甚至是不容許修改

從而引出了設計模式,就是爲了解決這個問題。  

OOP的思想,對象組織,是以繼承關係爲主線,縱向的,有底到高。

OOP問題:

1)、共性問題,縱向思惟,共性越多,接口就越多

2)、擴展問題,須要對現有的對像動態添加某種行爲。

所以,因爲OOP的問題,從而引出了AOP編程

 

三、AOP編程

所謂的AOP :面向切面編程,它是能夠經過預編譯的方式和運行期動態實現,在不修改源代碼的狀況下,給程序動態統一添加功能的技術。

OOP是關注將需求功能劃分爲不一樣的,相對獨立的,封裝良好的類,並讓他們有自已的行爲,依靠繼顧,多態來定義彼此的關係。

AOP是但願可以將通用功能從不相關的類分離出來,可以使不少類,共享一個行爲,這個行爲,一旦發生變化,咱們只須要修改這個行爲就好了,而不須要去修改其餘的類。

AOP的切面怎麼理解呢?

橫切關注點:好比一個電商系統,處理一個訂單,須要進行受權認證,訂單處理,日誌記錄。。。更多操做;商品入庫,也須要進行受權認證,入庫處理,日誌記錄。。。更多操做。

OOP,程序都是經過類和接口組織的,核心業務邏輯採用OOP是很合理的。但對於橫跨系統中多個模塊的功能需求,就比較吃力了,好比日誌處理,受權驗證,統一的異常處理,性能統計等

而這些都有一個共同點,都是非業務的,非業務的功能代碼,從業務代碼中抽離出來,獨立到非業務的功能代碼中,這樣咱們改變這些行爲時,就不會影響現有的業務邏輯代碼

簡單來講,AOP就是將通用功能抽取出來。面向切面,就是關注通用功能,而不關注業務,而咱們的OOP是關注業務的,這就是它們的區別。

AOP實現原理:預先定義一組特性,使它具備攔截方法的功能,執行方法以前和以後作你想要作的事情,而這個的攔截關卡,就是所謂的切面 

過濾器,其實就是AOP的一種實現

AOP的優點:

1)、將通用功能從業務邏中抽離出來,提升代碼的複用性,有利於後期的維護和擴展

2)、在軟件設計時,抽出通用功能(抽出切面),下降架構的複雜度,這樣在作系統時,只須要完成業務處理功能

 

四、AOP和OOP的區別:

1)、面向的目標不一樣:OOP面向的是名詞領域(商品、對象、類),AOP面向的是動詞領域(受權、驗證、監控、埋點)

2)、思想結構不一樣:OOP是縱向結構,AOP是橫向結構。

3)、注重的方面不一樣:OOP注重業務邏輯單元的劃分;AOP偏重業務處理過程當中某個步驟或者階段的行爲。

 

五、AOP和OOP的關係。

AOP實際上是OOP的一個補充,它們都是編程思想,是相互彌補各自的不足,就猶如,OOP彌補POP的不足。

核心需求,仍然由OOP來實現,具體的業務,由POP來實現。而AOP就是爲了讓OOP更專一於業務的邏輯處理,它們都是相輔相成的

 

六、如何在代碼裏去實現AOP

這裏就不過多的介紹了,實如今AOP的方式有不少種,經過設計模式就能夠實現。

裝飾器模式:容許向一個對象添加新的功能,同時又不改變其結構。

代理模式:一個類表明別一個類,而後向外界提供功能接口。

過濾器。

相關文章
相關標籤/搜索