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

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

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

    冒號和他的學生們(連載11)——切面范式

    冒號和他的學生們

    ——程序員提高班紀事

    1. 切面范式

    橫看成嶺側成峰                                            ——《蘇軾·題西林壁》


    引號重開話題:“OOP方興未艾,AOP又開始嶄露頭角。AOP算是OOP的一種分支、一種補充還是一種超越?”

    嘆號故作捶胸頓足狀:“OOP還沒有完全吃透,又來了個什么AOP。”

    “不同的人對新生事物采取不同的態度。”冒號王顧左右而言他,“追星族傾向于盲目追捧,唯恐落伍,他們信奉新潮的流行的就是好的;守舊派傾向于本能抗拒,回避求新,他們認為經典的傳統的才是好的。”

    引號和嘆號互視一眼,不情愿地戴上了老冒派發的帽子。

    冒號續道:“從宏觀角度看,太陽底下沒有新鮮事——AOP無非是SoC原理和DRY原則的一種應用;從微觀角度看,太陽每天都是新的——AOP雖自OOP的土壤中長出,卻脫離藩籬自成一體,并且嫁接到非OOP的領地,不僅在純過程式語言、函數式語言、甚至邏輯式語言中得到發展,而且本身也具備了一定的聲明式語言特征,成為一種新的軟件模塊化方式。”

    問號舉手:“什么是SoCDRY?”

    引號代答:“SoC就是Separation of concerns,即關注點分離;DRYDon’t Repeat Yourself,即盡量減少重復代碼。”

    “答案正確,加十分!”冒號戲贊道,“不良代碼通常有兩種病征:一是紛亂如麻,糾纏打結,可謂剪不斷理還亂;二是疊床架屋,臃腫不堪。治療此類病癥一個有效的方法是抽象與分解:從問題中抽象出一些關注點,再以此為基礎進行分解。分解后的子問題主題鮮明并且獨立,不會牽一發而動全身。同時具有相同特征的部分可以象代數中的公因子一樣提取出來,減少了代碼重復。”

    句號醒悟道:“這不就是模塊化嗎?”

    “準確地說,抽象是前提,分解是方式,模塊化是結果。”冒號很講究精確,“大家記得庖丁解牛的故事吧?在常人眼中復雜的牛體,庖丁經過抽象,已目無全牛,及至提刀分解,自是游刃有余。待牛如土委地,模塊化既成。”

    句號舉一反三:“前面提到的編程范式的基本思想大多不也如此?將程序分別抽象分解為過程、函數、斷言、對象和進程,就依次成為過程式、函數式、邏輯式、對象式和并發式。至于泛型式——”

    句號講不下去了。

    “泛型式雖未引入新類型的模塊,其核心也是抽象出算法后與數據分解。”冒號為其解圍,“以此類推,切面式的AOP將程序抽象分解為切面。”

    問號提問:“抽象與分解的原則是什么?”

    冒號作了個V字:“兩條:單一化,正交化。每個模塊職責明確專一,模塊之間相互獨立,即高聚合低耦合high cohesion & low coupling)。此原則相當普適,是分析復雜事物的一種基本方法,在數學和物理中應用得尤為廣泛,如質因式分解、正交分解、譜分解等等。”

    逗號調皮地抬杠:“為什么稱為正交化呢?斜交化不行嗎?”

    冒號呵呵一笑:“互為正交的兩個向量在彼此方向上投影為零,意味著彼此獨立,互不影響,斜交可不行。”

    逗號吐了吐舌頭。

    “誠如前述,AOP以切面為模塊。”冒號返回主題,“切面Aspect常直譯為‘方面’,但它描述的是橫切關注點Cross-cutting concerns),故‘切面’更準確生動,而‘方面’則失之空泛呆板。何謂橫切關注點?顧名思義,乃是與程序的縱向主流執行方向橫向正交的關注焦點。不妨回顧一下,無論是過程式的函數,還是對象式的方法,都包含了完整的執行代碼。但有些代碼橫跨多個模塊,以片斷的形式散落在各處,雖具有相似的邏輯,卻無法用傳統的方式提煉成模塊,難以實現SoCDRY。典型的例子如:在調用某些對象的方法、讀寫某些對象的域、拋出某些異常等等前后,需要用到統一的業務邏輯,諸如日志輸出、代碼跟蹤、性能監控、異常處理、安全檢查、事務管理等等。為解決此類問題,AOP應運而生。它將每類橫切關注點封裝到單獨的Aspect模塊中,將程序中的一些執行點與相應的代碼綁定起來。單個的執行點稱為接入點join point),例如:調用某個對象的方法前后;符合預先指定條件的接入點集合稱為切入點pointcut),例如:所有以set為命名開頭的方法;每段綁定的代碼稱為一個建議advice)。”

    問號有點疑問:“接入點與切入點有何區別?”

    冒號釋疑:“望文生義,接入處是點,切入處是面,面由點組成。advice定義于切入點上,執行于接入點處。換言之,共享一段代碼的接入點組成了一個切入點。切入點一般用條件表達式來描述,不僅有廣泛性,還有預見性——以后新增的代碼如果含有滿足切入點條件的接入點,advice中的代碼便自動附著其上。這是AOP威力所在,但有時也是麻煩所在。”

    引號很較真:“好像一些書上把join point譯作連接點,把advice譯作通知。”

    “誤導,完全是誤導!”冒號有些痛心疾首,“何謂join point?是advice中額外代碼接入之處,join顯為‘參加’、‘加入’之意。如果說翻作‘連接’只是因缺乏動感和方向性而不夠貼切的話,將advice譯作‘通知’則近乎荒謬了。advice是在原有程序流程中加入的額外流程,可理解為建議采取的措施,而‘通知’強調的是一種信息,難道是程序運行到join point的信息?抑或采取某種行動的信息?簡直不知所云。”

    頓了一會,冒號仍意猶未盡:“英文好的技術不好,技術好的英文不好,兩者都好的不屑去翻譯,導致市面上的譯書雖汗牛充棟,然佳作寥寥。這里奉勸各位,如果真想成為優秀的程序員,一定要盡可能地讀原文的書籍、文章和文檔。事實上,凡是科學和藝術方面的專業人員,要想專業水平上一層臺階,都應讀該專業權威經典的原文。要知道,語言之間的天塹原本難以彌合,譯者的專業水準、語言功底和嚴謹程度更是參差不齊。”

    逗號抱怨:“英文雖讀得懂,但太慢、太費勁了。”

    “多讀,讀多了就習慣了。”冒號鼓勵著,“對程序員來說,英語也是一門計算機語言。”

    問號的求知欲很強:“AOP實現的機理是什么?”

    冒號回答:“如果一個程序是一個管道系統,AOP就是在管道上鉆一些孔,在每個孔中注入新的代碼流。因此AOP實現的關鍵是將advice的代碼嵌入到主體程序之中,術語稱編織weaving)。這是很自然的——將問題分解之后再合成,問題才得以還原。編織可分兩種:一種是靜態編織,通過修改源碼或字節碼(bytecode)在編譯期compile-time)前后或加載期load-time)嵌入代碼;另一種是動態編織,通過代理(proxy)等技術在運行期run-time)實現嵌入。具體的工具包括一些擴展性語言如AspectJ、AspectC++等和一些frameworkAspectWerkz、Spring、Jboss AOP等。”

    嘆號搔著頭:“聽起來挺復雜的。”

    句號說:“這些機理是AOP的實現者需要操心的,使用者只需關心AOP是否好用,性能如何等等。”

    冒號表示贊同:“與OOP一樣,AOP在帶來便利的同時,也增加了一定的復雜度和性能損耗。它們更適用于大中型程序,用在小型程序中則不啻牛刀殺雞。”

    posted on 2008-05-11 00:00 鄭暉 閱讀(2751) 評論(17)  編輯  收藏 所屬分類: 冒號和他的學生們

    評論

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 08:48 12

    為什么一直抄些不是自己的東西??這些東西你了解嗎??懂嗎?  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 09:47 鄭暉

    @12
    余嘗售蛋于市,一蒙面者驟至:“為何屢竊他人之蛋來此兜售?”余恐甚:“竊何人之蛋?”其支吾不語,復問:“汝知此蛋乎?”余益惑之:“倘所售者良,焉管吾知之否?”  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 10:12 Happy漫步者

    不過挺有意思   回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 10:51 BeanSoft

    Java,成也框架,敗也框架。有時候我只想,如果外星人也搞這么多概念啥的,那么銀河系的互聯網就算聯網了,也跟沒聯網差不多。其實搞概念的,一般都是大公司趁聽眾聽得云里霧里,然后伺機銷售自己的XXX軟件產品/解決方案,典型的例如SOA。不信的,有機會看看貴公司銷售人員的PPT,就明白了。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 11:10 lianyeyu

    有意思  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 11:11 隔葉黃鶯

    我每篇都讀過,我看文章或者買書,都是認為,只要這對我有益處何管是哪來的,或者別人對此的評論是如何。

    尤其是對于有些國人寫的書,很多人其他根本就沒怎么讀過就妄加評論。

    博主的電腦是用的寬屏的顯示器,難怪我在 1024X768 下幾乎就看不到右邊的導航了。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 11:21 鄭暉

    @隔葉黃鶯
    多謝仗義直言。若右邊導航仍不正常,煩請相告。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 14:16 BeanSoft

    右邊導航能看到,略微超邊. 1024x768.

    感覺現在論壇和網絡都彌漫不好的風氣,就是喜歡惡意攻擊,反而愿意弄點資料分享的人是越來越少,有時候轉載注明出處也有人不滿,評論說:是抄xxxx的手冊吧?  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 16:19 鄭暉

    @BeanSoft
    在1024x768下調整了header的寬度,不再出現水平滾動條了。多謝指出問題。
    另:相比其他網站,blogjava的空氣已經相當清新了。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 19:38 三人行,必有我師焉

    姑且不論內容,樓主的文筆真的不錯,可以出書了。即使是抄,那也是青出于藍勝于藍,純技術的文章我是懶得讀的,多謝樓主寫出這些有韻味的技術文章。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 19:40 三人行,必有我師焉

    我機器是1680*1050的分辨率,好像標題顯示的不對,不過無傷大雅,呵呵。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-11 22:55 鄭暉

    @三人行,必有我師焉
    現在標題在您那超寬的顯示器中也該正常了吧?  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-12 09:41 faen

    這篇很贊啊,樓主真牛。 以前看過幾篇關于AOP的文章,說的那個切面和切入點什么的,一直不知所云,看完樓主的文章,感覺有點悟了  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-05-12 10:12 binge

    終于,我決定留名于此。有些東西還是很形象的  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2008-06-20 11:22 smilingfish

    猶如醍醐灌頂,不易。  回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式[未登錄] 2008-06-28 18:10 flydream

    寫的非常不錯,希望博主再接再厲啊。
      回復  更多評論   

    # re: 冒號和他的學生們(連載11)——切面范式 2009-01-19 14:07 duxu

    如夢方醒  回復  更多評論   

    導航

    統計

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: av成人免费电影| 日本免费网址大全在线观看 | 亚洲美女免费视频| 99在线热播精品免费99热| 337p日本欧洲亚洲大胆艺术| 最近高清国语中文在线观看免费| 亚洲狠狠婷婷综合久久久久| 日本免费人成在线网站| 精品久久久久久亚洲综合网| 亚洲人精品午夜射精日韩| 99久久国产免费中文无字幕| 国产精品亚洲精品久久精品| 婷婷亚洲综合五月天小说 | 全免费A级毛片免费看网站| 一区二区三区在线观看免费| 亚洲一区二区三区免费观看| 夜色阁亚洲一区二区三区| 57pao一国产成视频永久免费| 久久国产亚洲精品无码| 成年人视频在线观看免费| 在线免费观看伊人三级电影| 亚洲卡一卡二卡乱码新区| 国产精品亚洲а∨无码播放| 日韩毛片无码永久免费看| 久久久久国产免费| 一级日本高清视频免费观看| 精品亚洲456在线播放| 婷婷亚洲综合五月天小说| 久久影院亚洲一区| 色吊丝最新永久免费观看网站| 亚洲精品久久无码| 亚洲视频在线免费看| 亚洲精品国精品久久99热| 成人无遮挡裸免费视频在线观看 | 两个人看www免费视频| 一本色道久久88亚洲精品综合| 四虎永久免费影院在线| 国产成人无码免费看视频软件| 亚洲欧美日韩综合久久久久| 91亚洲va在线天线va天堂va国产| 免费可以在线看A∨网站|