概念

  • Aspect-Oriented Programming(AOP):想想OOP是不是有些熟悉,AOP翻譯過來的意思就是面向切面編程。先來關注一下涉及到的以下幾個概念點。

  • 橫切關注點:
    存在于項目的絕大多數(shù)業(yè)務中可以通用的一些輔助性的功能。例如日志、安全、持久化等模塊。它們存在于核心業(yè)務代碼塊的各個地方,卻又獨立于這些核心業(yè)務邏輯。
    如圖所示:


    Paste_Image.png

  • 切面:
    這些橫切關注點的統(tǒng)一抽象。

  • 所以面向切面編程,就是將項目的輔助性功能(如日志、異常處理、緩存處理等)與業(yè)務邏輯進行分離,把繁瑣的輔助性代碼抽離出來不用重復Copy,使得程序具備更高的模塊化。


實現(xiàn)方式

  • 靜態(tài)織入
    即編譯時織入,實現(xiàn)原理是對編譯器做擴展,使得在代碼編譯時編譯器將切面代碼織入到指定的切點。

  • 動態(tài)織入
    即運行時織入,編譯器在編譯時對切面代碼和業(yè)務代碼分別獨立編譯,而在運行的時候由CLR進行代碼混合。


.Net平臺的切面實現(xiàn)——PostSharp