1引言
傳統的編程技術,采用分解的方式將一個軟件系統劃分為相對較小的、易于分析、理解的模塊,如果這些模塊仍難以分析、理解,則迭代的將其分解為更小的模塊,直到這些模塊可以容易的分析、理解、設計與編碼。通過對這些模塊進行分析,設計,然后使用相應的編程語言實現這些模塊,再以編程語言所定義的方式將這些模塊組裝起來,形成最終的軟件系統。例如,面向過程編程中,將系統分解為完成單一功能的函數,并通過函數之間的調用完成復雜的功能,最終形成這個系統。面向對象編程中,通過分析,抽象出一系列具有一定屬性與行為的對象,并通過這些對象之間的協作完成系統的功能。
傳統的編程技術傾向于按照功能或行為對軟件系統進行分割,這個分割的結果是實現某一功能的模塊,如函數、過程、類等。但在編程實踐中,人們認識到,軟件系統中有些行為無法封裝在單個的模塊中,例如日志記錄、事物處理、對上下文敏感的錯誤處理、性能優化等等。通常這些功能與行為不實現系統的業務功能,但輔助這些功能的實現,并散布在實現系統功能的諸多模塊中,從而造成代碼的糾結,這使得實現系統功能的模塊的代碼難于閱讀、理解、調試、維護和擴展等,并使得糾結的代碼難于復用。如果我們將實現系統業務功能的模塊看作系統的縱向分解單元,那么上述分散在功能模塊中的功能與行為就形成了一種橫向的方面(Aspect),方面與模塊形成了橫切(Crosscutting),從而造成傳統的編程技術無法將方面模塊化,造成兩種代碼糾結(Tangling)在一起。
因此,我們需要一種新的編程思想,對系統中的橫切方面進行處理,解決由此造成的代碼糾結問題,并使方面可模塊化,促進功能模塊與方面彼此的復用。
2AOP簡介
原文轉自:http://www.anti-gravitydesign.com