小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

面向方面編程新思想

 Frank_Chia 2009-08-24

   

    在程序員的圈子里面,有群人數(shù)很少但態(tài)度卻十分堅定的開發(fā)人員。當(dāng)他們宣稱,真正的程序員會編寫自己的驅(qū)動程序。因為如果不這樣,那么采用任何其他的方式都將會是瘋狂和缺乏技術(shù)理性的,并且還會承擔(dān)一些不必要的風(fēng)險。

    在軟件行業(yè)的另一端,人們卻在為類似于面向方面編程(Aspect Oriented Programming即AOP)的技術(shù)歡呼雀躍。他們以非常嚴(yán)肅的態(tài)度說道,真正的程序員希望盡可能的保持多產(chǎn),這樣才能穩(wěn)住自己的飯碗。相對于對自己工作方式三天兩頭的革新,這些程序員們更希望能開發(fā)更多的程序和更為有效的對代碼進(jìn)行重用。

    AOP是從什么地方來的?

    多年以來,面向?qū)ο螅∣O)時編程技術(shù)革新的先鋒,但是,即使是針對不同功能編寫分離代碼片段的面向?qū)ο笏枷胍矡o法將程序開發(fā)人員從一遍遍重寫應(yīng)用程序多個部分的煩惱中解脫出來。

    來自Xerox Palo Alto Research Lab(即PARC)的研究人員早在1990年開始就對面向?qū)ο笏枷氲木窒扌赃M(jìn)行了分析。他們研究出了一種新的編程思想,借助這一思想或許可以通過減少代碼重復(fù)模塊從而幫助開發(fā)人員提高工作效率。與此同時,美國Northeastern University的博士生Cristina Lopes和其同事也開始了類似的思考。最終,美國國防先進(jìn)技術(shù)研究計劃署(Defense Advanced Research Projects Agency即DARPA)注意到了這項工作,并提供了科研經(jīng)費,鼓勵將二者的工作成果結(jié)合起來。由此,AspectJ誕生了。它作為Java語言的一套擴(kuò)展系統(tǒng)使得當(dāng)今的程序員們現(xiàn)在就可以體驗AOP的思想。

    Avanade公司的高級方案構(gòu)架師Adam Magee認(rèn)為,AOP的核心思想就是“將應(yīng)用程序中的商業(yè)邏輯同對其提供支持的通用服務(wù)進(jìn)行分離。”該公司是一架專注于微軟技術(shù)的集成商。

    AOP的創(chuàng)業(yè)者們把這些通用服務(wù)稱之為“橫切關(guān)注點(crosscutting concerns)”,因為這些服務(wù)所提供的功能將橫貫應(yīng)用程序的多個對象需求。

    將AOP應(yīng)用到多個項目中的Magee也認(rèn)為,“開發(fā)人員可以對橫切關(guān)注點進(jìn)行檢測、審計、登陸、安全性檢查或異常處理。編寫這些服務(wù)的接口代碼將會非常耗費時間,并且開發(fā)人員要學(xué)會如何這樣做本身就已很長時間。”“這些事情將開發(fā)人員的精力從解決企業(yè)問題上面轉(zhuǎn)移開來——而后者才是價值之所在。這些麻煩將他們引到了鉆研復(fù)雜操作系統(tǒng)的艱難道路上。

    優(yōu)勢

    AOP的目標(biāo)就是要避免這些問題。它將編寫橫切關(guān)注點代碼的工作進(jìn)行分離——也就是所謂的“方面(aspects)”——把他們從組織為商業(yè)邏輯的對象的編寫工作中分離出來,然后提供相應(yīng)的功能構(gòu)架。這樣一來,應(yīng)用程序就可以使用各個方面所提供的功能而無需重新編譯或重新編寫任何代碼。

    在一個應(yīng)用程序有很多對象都需要相同橫切關(guān)注點,這一技術(shù)即著眼于通過幫助開發(fā)人員創(chuàng)建所需要的橫切關(guān)注點定義來為開發(fā)人員節(jié)省時間。如果要對每一個對象編寫一個登錄系統(tǒng)——AOP中所謂的“散射(scattering)”實踐——AOP的先行者們建議在項目的設(shè)計階段,開發(fā)人員就應(yīng)當(dāng)定義應(yīng)用程序中每個對象的登錄需求,然后創(chuàng)建一個單獨的登錄工具執(zhí)行該應(yīng)用程序中任何所需的登錄操作。

    AOP的支持者們認(rèn)為,這樣的方式有幾個優(yōu)點。第一,在定義應(yīng)用程序?qū)δ撤N服務(wù)(例如登錄)的所有需求的時候,所花費的精力將使得該服務(wù)能夠被更好的定義,更好的被編寫代碼,并獲得更多的功能。這種方式還能夠處理在代碼涉及到多個功能的時候所出現(xiàn)的問題,例如改變某一個功能可能會影響到其它的功能,在AOP中把這樣的麻煩稱之為“糾結(jié)(tangling)”。

    其次,在創(chuàng)建離散方面所進(jìn)行的分析將有助于為開發(fā)團(tuán)隊指定一位精于該項工作的專家,由此負(fù)責(zé)這項工作的最佳人選將可以有效利用自己的相關(guān)技能和經(jīng)驗。

    第三個好處則是持久性的。標(biāo)準(zhǔn)的以對象為導(dǎo)向的項目開發(fā)中,不同的開發(fā)人員通常會為某項服務(wù)編寫相同的代碼,例如登錄。隨后他們會在自己的實施中進(jìn)開發(fā)各自的登錄服務(wù)以滿足不同單個對象的需求。而通過創(chuàng)建一段單獨的代碼片段,AOP提供了解決這一問題的持久簡單的方案,這一方案強(qiáng)調(diào)了未來功能的重用性和易維護(hù)性:不需要在整個應(yīng)用程序中一遍遍重新編寫登錄代碼,AOP使得僅僅編寫登錄方面(logging aspect)成為可能,并且可以在這之上為整個應(yīng)用程序提供新的功能。

    所有的這些好處都是的需要編寫的代碼量大大縮減,由此節(jié)省了時間,控制了開發(fā)成本,并且能將資源投入到比編寫登錄程序更為有價值的活動中去。

    AOP的工作原理

    IBM的客戶經(jīng)理Brad Kasell說道:“傳統(tǒng)上當(dāng)你開始開發(fā)應(yīng)用程序的時候,你從定義商業(yè)功能開始入手,即哪些應(yīng)用程序需要完成的所有功能。”

    “但總是項目涉及的所有開發(fā)人員都沒有編寫規(guī)范,因此開發(fā)人員們最終將會發(fā)現(xiàn)一個應(yīng)用程序在不同的地方需要不同類型的登錄服務(wù),因此需要在不同的時候一遍遍的編寫他們。”

    “AOP則意味開發(fā)人員最終能夠獲得這樣的機(jī)會,即提出一個問題:‘如何才能使得你只需編寫一次就可以讓這段代碼服務(wù)于整個應(yīng)用程序?'”

    因此,AOP項目的起點在于開發(fā)人員確認(rèn)所有對象都會需要的功能。隨著對象的進(jìn)一步開發(fā),開發(fā)人員將能夠找出每個對象都需要的一個普遍的功能,即“橫切點”。這時,不同于在對象內(nèi)部編寫登錄服務(wù),開發(fā)人員將編寫一個“切點(point cut)”,這一“切點”將“織入(weaves)”到對象的方面(aspect)中。

    這樣的方式時的應(yīng)用程序?qū)⒂幸恍ο蠛鸵粋€單獨的代碼池所組成,在對象調(diào)用所需的服務(wù)視,這一代碼池將提供通用的服務(wù)。

    如何進(jìn)行編程

    要把AOP引入到工作中來是比較簡單的,現(xiàn)在市面上已經(jīng)有了很多種工具。

    在這一領(lǐng)域,開放源代碼軟件是主打。最初由PARC設(shè)計的AspectJ在2002年已經(jīng)被轉(zhuǎn)手給Eclipse Foundation,它現(xiàn)在是最為流行的AOP工具。

    AspectJ將其自身標(biāo)榜為“同Java編程語言無縫集成的面向方面擴(kuò)展”,它提供了新的語法來定義、創(chuàng)建和使用方面。AspectJ可以被引入到多個編程工具中。最為常見的AOP工具是AspectWerkz,這是兩位BEA員工所開發(fā)的,這一軟件在松散的GNU公共許可證下發(fā)布。

    2005年1月,AspectJ和AspectWerkz達(dá)成協(xié)議,同意將二者的成果綜合到一起,取其精華創(chuàng)建一個單一的工具。

    像Jboss這樣的商用軟件制造商同樣提供AOP產(chǎn)品。這一企業(yè)所開發(fā)的JBoss AOP已經(jīng)在2004年晚期發(fā)布,同樣提供了面向方面的框架和一個方面庫。

    在.NET的陣營中,事情的進(jìn)展則要緩慢一些。2005年1月,微軟發(fā)布的Enterprise Library提供了7種不同的“應(yīng)用程序塊(application blocks)”。Avanade的Magee認(rèn)為這些組件可以被認(rèn)為是就方面,使用Visual Studio .Net. Loom中的屬性進(jìn)行訪問則是另一個回事。但這些工具所采用的方法決不是統(tǒng)一的。AspectJ是對Java的擴(kuò)展。反對陣營認(rèn)為,對語言進(jìn)行擴(kuò)展存在與之俱來的麻煩,AOP應(yīng)當(dāng)通過使用XML元數(shù)據(jù)來進(jìn)行部署,從而定義橫切點和所調(diào)用的對象。

    開發(fā)工具以及什么地方可以找到這些工具

    有限制條件么?

    這些方法上的不一致和實際應(yīng)用情況使得沒有主流IDE制造商將AOP作為產(chǎn)品工具中的“正式”部分。這也讓很多人感覺到盡管AOP的核心思想非常有用,但它仍然沒有成熟。“我相信AOP還不足以打入主流編程領(lǐng)域,因此很多人并不能確定如何才能將這一技術(shù)引入到日常的工作中去,” BEA技術(shù)辦公室的技術(shù)經(jīng)理Michael Smith說道。“這是在主流和技術(shù)前沿之間的一塊中間地帶。”

    這一理念正存在于這一中間地帶中,其真正的潛能在某種程度上仍然是未知的。

    開發(fā)顧問公司ThoughtWorks的咨詢師John Tirsen表示,它已經(jīng)在多個項目中使用了AOP。但模塊化服務(wù)(modularising services)的思想并非是全新的。“以前就有CORBA攔截機(jī)做過這樣的事情”,他說道。“更具爭議的問題在于它是否能夠用到橫切商業(yè)邏輯(cross-cutting business logic)上去。”

    BEA的Smith同樣認(rèn)可這一未被觸及的潛力。“沿著技術(shù)發(fā)展的道路我們可以認(rèn)為或許你希望借助AOP來對中間件的運行方式進(jìn)行調(diào)整,或許希望根據(jù)不同的商業(yè)規(guī)則在不同時間為不同的功能創(chuàng)建中間件層。

    盡管這種類型的工作聽起來很刺激,但沒有人能夠為這一技術(shù)的發(fā)布實施和廣泛采用提出一份時間表。

    AOP的精靈正躍躍欲試,即將從瓶子里面跑出來。

    “6個月以前,沒有人問我AOP,”Smith說道。“現(xiàn)在你可以在AOP討論會之中看到聽眾在我甚至沒有提到這一技術(shù)的情況下問到這一問題。無論你是否希望編寫自己的設(shè)備驅(qū)動程序,這都是一個明顯的信號,即AOP在將來的一段時間中值得人們?nèi)パ芯俊?/p>

   C#一種基于.Net平臺的一門新的語言, 它可以在編譯期以及運行期為原有的代碼注入新的代碼. 并且新的代碼同樣能保證.net平臺下的類型安全性.和CodeSmith不同的是 它的代碼生成技術(shù)是為已有的代碼添加新的功能, 也就是目前AOP技術(shù)所要實現(xiàn)的目標(biāo).如果你使用過Aspectj就會發(fā)現(xiàn)它語法的丑陋, 而G#的語法是C#2.0的一個子集,看上去非常的容易理解.并且G#是基于.Net的IL語言的,所以無論是C#還是VB.Net都可以發(fā)揮它的威力. 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多