欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
第三只眼看AOP

第三只眼看AOP

本文僅介紹了自己對AOP的認識,沒(méi)有技術(shù)含量啊,只是希望自己能夠在A(yíng)OP的大旗下,做個(gè)搖旗吶喊的小卒,借本文鼓吹一下AOP。不過(guò),這種鼓吹有點(diǎn)反面的意思,然而卻是自己較為冷靜的思考。識見(jiàn)疏陋,希望大家不吝賜教。

本文發(fā)表與2005年《程序員》第五期,發(fā)表時(shí)略有刪改。

什么是AOP?

最初聽(tīng)到AOP這個(gè)名詞,我總是錯覺(jué)其與OOP是否具有孿生性?那么,所謂AOP,即面向方面編程(Aspect Oriented Programming),是否是面向對象編程的一種進(jìn)化呢?關(guān)鍵就在于我們對“方面(Aspect)”的理解。確實(shí),“方面”這個(gè)詞語(yǔ)是夠抽象的,簡(jiǎn)單地說(shuō),它就是將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調用的邏輯或責任,例如事務(wù)處理、日志管理、權限控制等,封裝起來(lái),便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來(lái)的可操作性和可維護性。

對于OOP,Bruce Eckel有一句名言,“Everything is Object.”確實(shí),在程序的世界里,我們可以將萬(wàn)事萬(wàn)物定義為一種對象,并將這些對象的行為和屬性封裝起來(lái),同時(shí)定義好對象與對象之間的關(guān)系。很顯然,對于AOP而言,我們無(wú)法套用這句名言,妄言“Everything is Aspect.”實(shí)質(zhì)上,AOP只是OOP的一種補充或某種改進(jìn),它轉換了編程的范式和視角,關(guān)注了一直以來(lái)被OOP忽略或者說(shuō)未能解決好的角落,使開(kāi)發(fā)人員可以更好地將本不該彼此糾纏在一起的責任(如銀行業(yè)務(wù)和事務(wù)處理)分離開(kāi)來(lái)。通過(guò)面向方面的編程,可以將程序的責任分開(kāi),對象與方面互不干擾。面向方面的模塊并非顯式地為對象所調用,而是通過(guò)或注入或截取的方式,去獲得被封裝的對象內部方法間的消息,然后做出相應地處理。也許面向方面的模式破壞了對象的封裝,卻正其如此,方才能降低模塊與模塊之間的耦合度。同樣地,通過(guò)對“方面”的封裝,將這些通用的功能從不同的類(lèi)中分離出來(lái),使不同的模塊都能共享同樣的“方面”,這也極大地減少了重復代碼。

如果說(shuō)“對象”是一個(gè)空心的圓柱體,其中封裝的是對象的屬性和行為;那么面向方面編程的方法,就仿佛一把利刃,將這些空心圓柱體剖開(kāi),以獲得其內部的消息。而剖開(kāi)的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開(kāi)的切面復原,不留痕跡。

 

AOP,并不具有革命的驅動(dòng)力

 

個(gè)人認為,AOP還談不上是一種編程的思想,只能說(shuō)是一種方法而已。溯其根源,一般認為,面向方面編程(AOP)是施樂(lè )公司帕洛阿爾托研究中心(Xerox PARC)在上世紀90年代發(fā)明的一種編程范式。它在OOP的縫隙之中,抽象出“方面”的概念,目的就是為了打破對象的封裝性,以“方面”的方式對原有的模塊進(jìn)行重組,抽取那些與業(yè)務(wù)無(wú)關(guān)卻為整個(gè)系統所通用的功能,最終封裝在一起。

那么,最終封裝好的這些所謂“方面”,如何被業(yè)務(wù)對象所調用呢?這就需要“方面”擁有截取封裝對象消息的能力。在JAVA世界里,AOP的應用已經(jīng)走向比較成熟的應用。AspectJ、Spring,在體現AOP能力上來(lái)說(shuō),已經(jīng)漸趨成熟。甚至在JBOSS4.0中,已經(jīng)引入了AOP框架進(jìn)行開(kāi)發(fā),并在權限管理(Authentication)、錯誤處理(Error Handling)、事務(wù)處理(Transactions)、持久化(Persistence)等方面取得了很好的應用。在.Net平臺下,對于AOP的應用似乎卻走到了后面。在Microsoft 推出的.Net Framework 1.1中,并沒(méi)有應用AOP,也未曾提供AOP的框架。不過(guò).Net Framework仍然提供了實(shí)現AOP的技術(shù)可能,即通過(guò).Net Framework的反射機制或.Net Remoting的代理機制獲取元數據信息或對象內部間傳遞的消息。同時(shí),我也看到開(kāi)源社區中的AOP.Net項目,采用了非托管的.Net Profilling API,它采用了非托管的C++ COM組件,可以在相關(guān)事件發(fā)生時(shí),通過(guò).Net系統捕獲其消息并發(fā)送通知。

AOP在企業(yè)應用中正逐漸體現其自身的價(jià)值。但正如其名,它的作用更多地是關(guān)注于系統的某一方面。AOP還缺乏革命的驅動(dòng)力,并不足以顛覆OOP世界。我們不可能預見(jiàn)AOP之于OOP,象當初面向對象編程取代面向過(guò)程編程那樣,具有強大至可以顛覆程序員思想的力量。而事實(shí)上,AOP從一誕生以來(lái),就從未貼上“革命”的標簽。相反,它更多地起到了推波助瀾的作用,彌補著(zhù)OOP的缺失,進(jìn)而在OO程序設計中,擴展了一種更寬廣的模式。

 

AOP,“設計模式”的延續

 

不錯,AOP的目的,恰恰就是做了“設計模式”想做卻一直未曾做到的功能。GOF的“設計模式”給了我們設計的典范與準則,通過(guò)最大程度的利用面向對象的特性,諸如利用繼承、多態(tài),對責任進(jìn)行分離、對依賴(lài)進(jìn)行倒置,面向抽象,面向接口,最終設計出靈活、可擴展、可重用的類(lèi)庫、組件,乃至于整個(gè)系統的架構。在設計的過(guò)程中,通過(guò)各種模式體現了對象的行為,暴露的接口,對象間關(guān)系,以及對象分別在不同層次中表現出來(lái)的形態(tài)。然而鑒于對象封裝的特殊性,“設計模式”的觸角始終在接口與抽象中大做文章,而對于對象內部則無(wú)能為力。

舉例來(lái)說(shuō),我們需要為系統提供日志的能力。雖然我們可以通過(guò)裝飾模式(Decorate Pattern),提供各種日志的組合,但不可避免的是,大量的日志對象實(shí)例代碼的存在,導致了重復代碼的壞味道,同時(shí)也導致了強依賴(lài)性,這并不利于模塊間的解耦。如果我們通過(guò)AOP,將這些日志的功能看作是一個(gè)“方面”,然后將系統中需要日志能力的模塊置于該“方面”的偵聽(tīng)之中,抽象出來(lái)的“方面”好像是一個(gè)容器,在其內部的世界里,不分貧富貴賤。只要執行了某種業(yè)務(wù),這個(gè)容器就會(huì )忠實(shí)地記錄這些模塊間傳遞的消息。至于這些模塊到底實(shí)現了何種業(yè)務(wù),卻并非“方面”所關(guān)注的。

前面已經(jīng)敘述到,面向方面編程的價(jià)值主要體現在事務(wù)處理、日志管理、權限控制等與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調用的邏輯或責任上,而這些所謂的“方面”,恰恰是企業(yè)應用時(shí)非常必須的。因此,與其說(shuō)AOP是一種編程的技術(shù),毋寧說(shuō)AOP是一種企業(yè)的“設計模式”。它彌補了OOP之拙,卻未曾也不可能超越OOP而單獨存在。

posted on 2005-08-23 10:40 張逸 閱讀(3840) 評論(5)  編輯 收藏 所屬分類(lèi): AOP

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
刀城札記
簡(jiǎn)單理解AOP(面向切面編程)
面向對象編程(OOP)、面向組件編程(COP)、面向方面編程(AOP)和面向服務(wù)編程(SO...
和喜歡Spring的軟件工程師談?wù)凷pring框架的AOP
Spring中IOC和AOP的詳細解釋
AOP 面向方面編程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久