<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大音希聲、大象無形

    Java企業(yè)級應用軟件開發(fā)探討

    AOP能干什么?

    AOP是一個什么概念呢?

    AOP是Aspect Oriented Programming的縮寫,翻譯成中文就是面向方面編程。它是最近幾年流行起來的另一種編程方式。

    • 首先,AOP只是OOP的補充,換句話說,Procedure Oriented Programming的工程是很難,也是幾乎不可能使用AOP的。
    • 其次,AOP是對OOP系統(tǒng)的縱向切割,從另一個方面上實現(xiàn)了系統(tǒng)解耦
    • 再次,AOP給OOP提供了另一種重用的可能。

    對于OOP系統(tǒng)而言,系統(tǒng)的解耦主要依賴分層和良好的設計,一般良好的OOP架構沒有不采用分層和設計模式的(當然,分層分得恰當不恰當、模式用得好不好,跟框架的設計者有著直接的關系)。但是,對于OOP系統(tǒng)而言,它只能到達這一步了。

    對于系統(tǒng)的必須要求,比如日志、錯誤跟蹤、訪問攔截、權限控制等操作,OOP就很難達到八面玲瓏。

    其實,倒不是OOP一定不能實現(xiàn)上述功能的分離和重用,但是由于那又需要更高層次的抽象和封裝,憑空增加系統(tǒng)的復雜性和使用難度,又不利于版本控制和發(fā)布控制,一般來說,是得不償失的。

    所以,很多開源項目比如Commons Logging等應運而生,它們的存在從一定的意義上解決了這個問題。

    但是,還有一種很好的解決方案,那就是AOP(實際上AOP就是為了解決這種問題而誕生的)。

    AOP既然是OOP系統(tǒng)的縱向切割,那么它就應該具備以下幾點:

    1. 切入點(Point Cut):它需要一個點來切入到OOP系統(tǒng)中去,目前流行的AOP框架都采用從方法切入的方式。
    2. 切面(Advice):切入之后,它要做些什么呢?必須可以有一種方式進行定制,目前流行的AOP框架都采用Java代碼實現(xiàn)的方式
    3. 重用性:一般來說,AOP能帶來的重用一般都是Advice描述文件的重用,目前所有的AOP的Advice都是Java的Class文件,這就提供了一種可能,所有的Advice都可以通過打包成Jar的形式實現(xiàn)重用。

    由此可以看出,使用AOP能夠帶來的好處是提供了一種抽象模型的方式、一種重用以前工作的方式(在不更改過去的代碼的基礎上添加新的功能、同時也可以重用過去寫的Advice)。

    AOP還有一個好處,就是減少工作量。

    因為目前流行的AOP框架的PointCut定義一般都支持通配,這樣就可以實現(xiàn)批量定義和修改。如果代碼有著良好的規(guī)范、在良好的設計下,開發(fā)和維護工作量的減少會非常可觀。而且對于添加新的功能不必修改原有的架構設計,從另一方面也降低了非常可觀的工作量。

    那么AOP在JavaEE企業(yè)級應用中能夠起什么作用呢?

    1. 事務控制:很多業(yè)務邏輯方法都需要事務控制,通過通配實現(xiàn)事務控制絕對是一個節(jié)省工作量的好辦法,如果再結合IOC更加可以脫離事務控制的依賴,實現(xiàn)事務控制靈活更換,提高了業(yè)務系統(tǒng)的重用性
    2. 權限控制:權限控制到底算不算業(yè)務邏輯?如果不算,為什么還要體現(xiàn)在業(yè)務邏輯中?通過AOP的方式,可以靈活的實現(xiàn)FilterChain機制,而業(yè)務邏輯的代碼可以對其毫無察覺。
    3. 持久層對象的裝飾和過濾:可以根據(jù)需要對持久層操作返回的結果進行裝飾和過濾,甚至替換,而對系統(tǒng)架構沒有任何要求。這是最漂亮和最干凈的做法。
    4. 系統(tǒng)級別診斷日志:實現(xiàn)可插拔式系統(tǒng)級別日志,這樣在系統(tǒng)正常運行后就可以為了提高系統(tǒng)性能而不費事的去掉它卻不會影響到系統(tǒng)的穩(wěn)定。
    5. 業(yè)務級別高級抽象:比如可以把工作流支持API封裝,通過AOP的機制實現(xiàn)Mixin,這樣就可以實現(xiàn)工作流支持和原業(yè)務邏輯分離,可以分開進行管理,也可以在更高的抽象級別上實現(xiàn)重用。

    AOP也不是沒有缺點,它本身就有一定的學習曲線,而且目前為止有具體意愿的好的實踐并不多,而且它也會給你的工程帶來復雜性,它還會給你的代碼增加理解的難度(不管你承認不承認,代碼閱讀的難度確實是跟代碼的耦合程度反相關的——雖然這是設計模式所力圖解決的問題)

    但是,目前來看適當?shù)氖褂肁OP,給你的項目提高靈活性和可維護性,是值得的。

    posted on 2006-03-27 17:46 guitarpoet 閱讀(1681) 評論(1)  編輯  收藏 所屬分類: 綜述

    Feedback

    # re: AOP能干什么? 2008-08-12 09:41 gfdsfgdjs

    自立更生 自己想!  回復  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲Av综合色区无码专区桃色| 成人免费在线观看网站| 久久国产成人亚洲精品影院 | 免费a级黄色毛片| 亚洲gay片在线gv网站| 成全视频在线观看免费高清动漫视频下载| 亚洲欧洲在线播放| 丁香花免费完整高清观看| 2020年亚洲天天爽天天噜| 天天摸夜夜摸成人免费视频| 亚洲爆乳成av人在线视菜奈实| 国产精品国产午夜免费福利看| 免费人成再在线观看网站| 国产精品亚洲不卡一区二区三区| 中国videos性高清免费| 亚洲人成亚洲精品| 最近免费中文字幕4| 国产亚洲美女精品久久| 中文字幕亚洲不卡在线亚瑟| 国内精品免费在线观看| 亚洲另类图片另类电影| 国产福利免费在线观看| 一级毛片aa高清免费观看| 亚洲AV乱码一区二区三区林ゆな| 69免费视频大片| 亚洲精品无码av片| 亚洲一级特黄大片无码毛片| 久久免费精品视频| 国产精品亚洲自在线播放页码| 日本一道本高清免费| 中文字幕在线免费视频| 亚洲精品动漫在线| 四虎国产精品免费视| 十八禁视频在线观看免费无码无遮挡骂过| 亚洲人成网站影音先锋播放| 在线观看免费宅男视频| A片在线免费观看| 亚洲国产欧洲综合997久久| 亚洲中文字幕无码久久2017| 九九精品免费视频| 丰满人妻一区二区三区免费视频|