# AOP (Aspect-Oriented Programming) 剖面導向程式設計(AOP)將系統分為核心關注點和橫切關注點,核心關注點是系統的核心功能,橫切關注點是散落在系統多處的小功能。 使用 AOP 的優點是可以降低系統耦合性和增強程式碼重用性。 <!-- more --> AOP 利用橫切技術將封裝對象剖析開,將重複使用到的部分封裝在一起,而重複使用到的部分幾乎都與業務邏輯無關。 ## AOP的中心思想 下圖為一般設計方法的流程,圖中的檢查授權、紀錄Log和效能追蹤都在每個方法內重複的撰寫,而這些也與核心邏輯不相關。  下圖為AOP的中心思想,將主要邏輯與次要邏輯分離,主要邏輯為商業邏輯,次要邏輯為其他共用邏輯稱為Cross-Cutting,這些次要邏輯會被重新設計封裝成獨立的物件稱為 Aspect。 在 AOP 的設計中,主要邏輯不需要知道這些可以重用的次要邏輯,在需要這些次要邏輯時再織入(Weaving)至應用上,不需要時可以馬上從應用上脫離出來。  ## 名詞介紹 * 橫切關注點(Cross-Cutting Concern): 與核心對象無關的共用行為,這些共用行為常見會被安插在各個物件的處理流程中,如上方一般設計流程的圖片,許多動作是被散落在各地,而這也大大增加了維護的難度。 * 切面(Aspect): 將散落各地與業務邏輯無關的共用行為 (Cross-Cutting Concern) 收集起來並重新設計成各個獨立可重用的物件。如同上方所提到,主要邏輯並不需要知道 Aspect 的存在,當需要 Aspect 時會再加入到應用中。 * 通知(Advice): 是 Aspect 的具體實作,內容為次要邏輯的行為或是所要提供的服務。 * 連接點(Join Point): Aspect 在應用程式執行時加入至主要邏輯的時機點,也就是 Aspect 被呼叫的時機點。 * 切入點(Point Cut): 定義哪些 Aspect 要應用到應用程式中的哪些 Join Point,具體的作法像是在一個定義檔中撰寫Point Cut,再依照這些定義去執行。 * 目標(Target): 一個 Advice 被應用的對象或目標物件。 * 引入(Introduction): 對一個現存的類別,為其增加行為而不用修改該類別的程式。也就是可以為某個已經撰寫、編譯完成的類別在執行時期動態的加入一些方法或行為,而不用修改或新增任何一行程式碼。 * 織入(Weaving): Advice 應用到目標對象的過程,織入的時間點有:編譯時期,類別載入時期,執行時。 ## 參考 [1][AOP學習(一)——概念及原理](https://kknews.cc/zh-tw/code/apkplzg.html) ###### tags: `Programming` `AOP`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up