天天看點

AOP 能夠給我們帶來什麼

   面向過程程式設計離我們已經有些遙遠,面向對象程式設計正主宰着軟體世界。當每個新的軟體設計師都被要求掌握如何将需求功能轉化成一個個類,并且定義它們的資料成員、行為,以及它們之間複雜的關系的時候,面向方面程式設計(Aspect-Oriented Programming,AOP)為我們帶來了新的想法、新的思想、新的模式。

如果說面向對象程式設計是關注将需求功能劃分為不同的并且相對獨立,封裝良好的類,并讓它們有着屬于自己的行為,依靠繼承和多态等來定義彼此的關系的話;那麼面向方面程式設計則是希望能夠将通用需求功能從不相關的類當中分離出來,能夠使得很多類共享一個行為,一旦發生變化,不必修改很多類,而隻需要修改這個行為即可。

面向方面程式設計是一個令人興奮不已的新模式。就開發軟體系統而言,它的影響力必将會和有着十數年應用曆史的面向對象程式設計一樣巨大。面向方面程式設計和面向對象程式設計不但不是互相競争的技術而且彼此還是很好的互補。面向對象程式設計主要用于為同一對象層次的公用行為模組化。它的弱點是将公共行為應用于多個無關對象模型之間。而這恰恰是面向方面程式設計适合的地方。有了 AOP,我們可以定義交叉的關系,并将這些關系應用于跨子產品的、彼此不同的對象模型。AOP 同時還可以讓我們階層化功能性而不是嵌入功能性,進而使得代碼有更好的可讀性和易于維護。它會和面向對象程式設計合作得很好。 

AOP 的應用範圍

傳統的程式通常表現出一些不能自然地适合單一的程式子產品或者是幾個緊密相關的程式子產品的行為,AOP 将這種行為稱為橫切,它們跨越了給定程式設計模型中的典型職責界限。橫切行為的實作都是分散的,軟體設計師會發現這種行為難以用正常的邏輯來思考、實作和更改。最常見的一些橫切行為如下面這些: 

日志記錄,跟蹤,優化和監控

事務的處理

持久化

性能的優化

資源池,如資料庫連接配接池的管理

系統統一的認證、權限管理等

應用系統的異常捕捉及處理

針對具體行業應用的橫切行為 

目前,前面幾種橫切行為都已經得到了密切的關注,也出現了各種有價值的應用,但也許今後幾年,AOP 對針對具體行業應用的貢獻會成為令人關注的焦點。

AOP 的具體實作

AOP 是一個概念,一個規範,本身并沒有設定具體語言的實作,這實際上提供了非常廣闊的發展的空間。AspectJ是AOP的一個很悠久的實作,它能夠和 Java 配合起來使用。

介紹 AspectJ 的使用和編碼不是本文的目的,你可以在 Google 上找到很多有關它的材料。

這裡隻是重溫 AspectJ 中幾個必須要了解的概念: 

Aspect: Aspect 聲明類似于 Java 中的類聲明,在 Aspect 中會包含着一些 Pointcut 以及相應的 Advice。

Joint point:表示在程式中明确定義的點,典型的包括方法調用,對類成員的通路以及異常處理程式塊的執行等等,它自身還可以嵌套其它 joint point。

Pointcut:表示一組 joint point,這些 joint point 或是通過邏輯關系組合起來,或是通過通配、正規表達式等方式集中起來,它定義了相應的 Advice 将要發生的地方。

Advice:Advice 定義了在 pointcut 裡面定義的程式點具體要做的操作,它通過 before、after 和 around 來差別是在每個 joint point 之前、之後還是代替執行的代碼。

下面要讨論的這些問題,也許正是接觸了 AOP 之後所困惑的。

AOP 幫助我們解決了新的問題沒有?

AOP 并沒有幫助我們解決任何新的問題,它隻是提供了一種更好的辦法,能夠用更少的工作量來解決現有的一些問題,并且使得系統更加健壯,可維護性更好。同時,它讓我們在進行系統架構和子產品設計的時候多了新的選擇和新的思路。

AOP 和 OOP 到底是什麼關系

很多人在初次接觸 AOP 的時候可能會說,AOP 能做到的,一個定義良好的 OOP 的接口也一樣能夠做到,我想這個觀點是值得商榷的。AOP和定義良好的 OOP 的接口可以說都是用來解決并且實作需求中的橫切問題的方法。但是對于 OOP 中的接口來說,它仍然需要我們在相應的子產品中去調用該接口中相關的方法,這是 OOP 所無法避免的,并且一旦接口不得不進行修改的時候,所有事情會變得一團糟;AOP 則不會這樣,你隻需要修改相應的 Aspect,再重新編織(weave)即可。 當然,AOP 也絕對不會代替 OOP。核心的需求仍然會由 OOP 來加以實作,而 AOP 将會和 OOP 整合起來,以此之長,補彼之短。

AOP 适合工業化的應用嗎? 

這個問題很難回答,其實最好的答案就是嘗試,用成功的項目或是産品來回答。Jboss 4.0 就是完全采用 AOP 的思想來設計的 EJB 容器,它已經通過了 J2EE 的認證,并且在工業化應用中證明是一個優秀的産品。相信在不遠的将來,會出現更多采用 AOP 思想設計的産品和行業應用。

小結

AOP 正向我們走來,我們需要關注的是怎麼樣使得它能夠為我們的軟體系統的設計和實作帶來幫助。本文旨在給大家一點啟發,能夠在更多的領域更深入的應用 AOP 的思想。

摘自網上

繼續閱讀