簡介
在‘面向切面’軟體開發中,橫切關係是程式中和其他模組有聯繫的‘切面’。這些關係在程式模組化的設計和實現中無法被自然得分解到模組中,導致或代碼過於分散,或代碼衝突,或者兩者都有。
舉個例子來說,編寫一個處理醫生記錄的app,這些記錄的索引是核心模組,同時關於存儲記錄或用戶信息的數據的歷史日誌,或者登錄的驗證系統,由於和app中大部分模組都有關係所以成為了‘橫切關係’。
背景
橫切關係是那些和程式中大部分模組都有聯繫的部分,它們形成了切面開發的基礎單元。這樣的橫切關係部分不能自然得適配面向對象編程理念和面向過程變成理念。
程式內那些衝突或者內部依賴過度一般都和橫切關係有直接聯繫,由於過程性和功能性程式語言的結構完全是步驟化調用,也就沒有語法可以同時進行功能實現和橫切關係處理,這樣一來,解決橫切關係的代碼就在程式中分散或者重複執行,最終導致了程式模組化的喪失。
AOP(面向切面編程)的目的是將這些橫切關係封裝進切面來保持程式的模組化,也就可以保持自然得模組獨立性和處理橫切關係代碼的可復用性。通過這些對橫切關係的設計處理,作為對於面向對象編程的一個補充,軟體工程的模組化和維護簡單化的優勢仍然可以保持。
模組
軟體模組(Module)是一套一致而互相有緊密關連的軟體組織。它分別包含了程式和數據結構兩部分。
現代軟體開發往往利用模組作合成的單位。
模組的接口表達了由該模組提供的功能和調用它時所需的元素。
模組是可能分開地被編寫的單位。這使他們可再用和允許廣泛人員同時協作、編寫及研究不同的模組。
面向切面的程式設計
面向切面的程式設計(aspect-oriented programming,AOP,又譯作面向方面的程式設計、觀點導向編程、剖面導向程式設計)是計算機科學中的一個術語,指一種程式設計范型。該范型以一種稱為側面(aspect,又譯作方面)的語言構造為基礎,側面是一種新的模組化機制,用來描述分散在對象、類或函式中的橫切關注點(crosscutting concern)。
切面的概念源於對面向對象的程式設計的改進,但並不只限於此,它還可以用來改進傳統的函式。與切面相關的編程概念還包括元對象協定、主題(subject)、混入(mixin)和委託。
最廣為人知的面向側面的程式設計語言是由施樂帕洛阿爾托研究中心開發的AspectJ,該語言可以和Java程式語言結合在一起使用。
在.NET Framework的環境,則有通過MSIL動態注入來實現AOP的PostSharp庫,但是到3.0版為為止,官方檔案中只註明適用於C#與VB.NET,不適用於C++/CLI。