AOP(Aspect-Oriented Programming)是一種將函數的輔助性功能與業務邏輯相分離的編程范式(programming paradigm),其目的是將橫切關注點(cross-cutting concerns)分離出來,使得程序具有更高的模塊化特性。
AOP體現原則:單一職責原則 和 開放封閉原則
假設我們有一個應用場景(見下圖),假如我不想改變舊有的SayHello方法,在方法前面添加驗證功能,后面添加寫日志功能,那么要怎么做呢?就需要使用AOP的方式來實現此功能了。
常見的AOP實現方式有三種:中間件Middleware、過濾器Filter、代碼織入(靜態織入和動態代理)
1、中間件Middleware
請求管道包含一系列請求委托,依次調用。 下圖演示了這一概念。 沿黑色箭頭執行。
2、Filter
下圖展示了過濾器類型在篩選器管道中的交互方式。
3、代碼織入
第一種:靜態織入,即:在編譯時,就將各種涉及AOP攔截的代碼注入到符合一定規則的類中,編譯后的代碼與我們直接在類中調用屬性或方法前后增加代碼是相同的,只是這個工作交由編譯器來完成。
第二種:EMIT反射,即:通過Emit反射動態生成代理類,如使用Castle.DynamicProxy的AOP實現方式。