![面向方面編程_第1頁](http://file4.renrendoc.com/view/ecdcbb515c755870ec82bca9475ebe1a/ecdcbb515c755870ec82bca9475ebe1a1.gif)
![面向方面編程_第2頁](http://file4.renrendoc.com/view/ecdcbb515c755870ec82bca9475ebe1a/ecdcbb515c755870ec82bca9475ebe1a2.gif)
![面向方面編程_第3頁](http://file4.renrendoc.com/view/ecdcbb515c755870ec82bca9475ebe1a/ecdcbb515c755870ec82bca9475ebe1a3.gif)
![面向方面編程_第4頁](http://file4.renrendoc.com/view/ecdcbb515c755870ec82bca9475ebe1a/ecdcbb515c755870ec82bca9475ebe1a4.gif)
![面向方面編程_第5頁](http://file4.renrendoc.com/view/ecdcbb515c755870ec82bca9475ebe1a/ecdcbb515c755870ec82bca9475ebe1a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
編程語言面向方面編程01簡介比較小結利弊軟件特點目錄03050204基本信息面向方面的編程(AOP)由來已久,但是直到最近才開始獲得Microsoft.NET開發(fā)社區(qū)的青睞。任何一項新技術的采納往往都會產生對該技術及其使用的誤解,AOP也不例外。為了澄清對AOP的誤解,本文以及下列代碼示例將舉例說明一個AOP的實際應用程序和一些AOP能夠解決的常見問題。以使用Web服務的應用程序為例,我們將擴展該Web服務返回的對象功能,方法是通過一個AOP框架對返回的對象應用新的方面。這些方面將為此功能獨立生成對象模型,從而脫離WSDL。簡介簡介在考慮對象及對象與其他對象的關系時,我們通常會想到繼承這個術語。例如,定義某一個抽象類—Dog類。在標識相似的一些類但每個類又有各自的獨特行為時,通常使用繼承來擴展功能。舉例來說,如果標識了Poodle,則可以說一個Poodle是一個Dog,即Poodle繼承了Dog。到此為止都似乎不錯,但是如果定義另一個以后標識為ObedientDog的獨特行為又會怎樣呢?當然,不是所有的Dogs都很馴服,所以Dog類不能包含obedience行為。此外,如果要創(chuàng)建從Dog繼承的ObedientDog類,那么Poodle放在這個層次結構中的哪個位置合適呢?Poodle是一個Dog,但是Poodle不一定obedient;那么Poodle是繼承于Dog還是ObedientDog呢?都不是,我們可以將馴服看作一個方面,將其應用到任何一類馴服的Dog,我們反對以不恰當的方式強制將該行為放在Dog層次結構中。在軟件術語中,面向方面的編程能夠獨立于任何繼承層次結構而應用改變類或對象行為的方面。然后,在運行時或編譯時應用這些方面。舉一個關于AOP的示例,然后進行描述,說明起來比較容易。首先,定義四個關鍵的AOP術語,這很重要,因為我將反復使用它們:接合點(Joinpoint)—代碼中定義明確的可識別的點。切點(Pointcut)—通過配置或編碼指定接合點的一種方法。利弊利弊一種常見的誤解是認為AOP是截獲,事實并非如此。但是,它確實運用了截獲來應用通知以及組合行為。有一些.NET代碼示例通過ContextBoundObject以一種AOP翻版風格說明截獲??墒怯肅ontextBoundObject來說明截獲并不合適,因為使用這種方法的先決條件是所有需要進行截獲的類都必須從ContextBoundObject繼承。像ContextBoundObject這樣帶有先決條件的AOP方法會帶來需求產生的負面影響,所以在AOP中被視為重方法,應該避免使用。重方法在系統(tǒng)中遺留的大量“足跡”會潛在地影響每個類,阻礙將來更改或修改系統(tǒng)的功能。我創(chuàng)建了一個名為Encase的輕量型框架。用“輕量型”這個術語的意義是整體上對系統(tǒng)沒有影響。系統(tǒng)的不同部分仍然受AOP影響,但是選擇輕量型框架并應用良好的編程實踐可以減輕大部分負面問題。Encase框架的用途是簡化切點、混入和方面組合。開發(fā)人員能夠通過代碼在Encase中應用方面,從而代替大多數其他輕量型AOP框架使用的配置文件(例如XML)。重量型框架阻礙了AOP的應用,但是妨礙AOP廣泛應用的罪魁禍首是目前可用的AOP示例幾乎都都包含以下內容:執(zhí)行方法前先截獲,并應用執(zhí)行Trace.WriteLine("Methodentered.")的方面。與普遍看法相反,除了日志記錄、安全、規(guī)范以及這類性質的事情外,AOP對于解決其他問題也很有用。比較比較為了說明更實用的使用AOP的方法,我們將創(chuàng)建一個應用程序,從名為ContactService.Service的Web服務接收people對象的集合。在.NET開發(fā)中使用Web服務的最常見方法是調用返回XML的Web服務,該服務通過框架自動反序列化為一個對象。這些對象僅包含數據而不包含任何行為。在.NETFramework2.0中,通過使用partial關鍵字并創(chuàng)建行為,能夠對這些自動代碼生成的對象添加功能。但是在一些Web服務或代理對象之間重用某個特定行為時仍然存在一個問題。如前所述,多數情況下,共享的公共行為將包含在一個抽象類中,其他所有類從該類繼承。但是,我們不能使Web服務對象繼承功能。借此良機,通過這個問題說明AOP功能如何強大。我們的應用程序用于顯示人信息。最初它的用途是顯示信息,但是需要添加某些行為。為了查看代碼示例,我們需要創(chuàng)建一個稱為TheAgileDeveloper.ContactService的虛擬目錄。該目錄必須指向TheAgileDeveloper.ContactService項目在本地計算機上的位置。注通過localhost/TheAgileDeveloper.ContactService可以訪問此項目,這一點很重要。圖1.應用程序屏幕快照。應用程序有一個視圖,它是一個名為MainForm的WinForm,用于顯示左側ListView中Web服務返回的人對象。選定一個人時,名字、姓氏和Web頁將顯示在右側的文本框中。載入MainForm時,它調用ServiceManager類來獲取人信息。軟件特點軟件特點每個框架應用切點、通知或方面的方法都是獨特的,但是其目的和概念是相同的。在本文示例中,Encaser包裝一個對象時真正進行的操作是,通過命名空間中的類產生MSIL代碼,從而隨時創(chuàng)建新的Contact類型。新Contact類型派生于Contact類,它仍然共享類型,但是新包裝的對象還持有對ContactSave對象的引用,后者是我們混入的。ISavable.Save方法在新的Contact對象上實現,因此在調用Save時,它實際上將調用委托給混入的ContactSave對象。這樣做的優(yōu)點是能夠將新的Contact對象轉換為在任何混入對象上實現的任何接口。圖2.包裝對象的UML圖表圖2.包裝對象的UML圖表。您或許在想,通過.NETFramework2.0的部分類語言功能,可以在另一個partial類中添加Save行為。這是可能實現的,但是本文沒有采用這種方法,這是為了使代碼與.NETFramework1.x的其他版本向后兼容。既然有部分語言功能,那么在正常情況下,前面的示例也就不需要使用混入了。但是混入仍然很有價值,因為通過它,開發(fā)人員可以混入可重用的對象行為,這些對象可以源自其他不相關的對象層次結構,它實現的功能比partial類更多。在使用partial關鍵字時,是在同一個類或類型中添加代碼,只不過物理位置不同。下一個混入示例說明的添加行為不只特定于Contact類,而是一個名為FieldUndoer的可重用類。FieldUndoer實現了IUndoable接口,允許
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互聯網電路租賃合同(三篇)
- 2025年個人租房合租合同常用版(4篇)
- 保齡球館裝修合同范本
- 主題餐廳裝修免租合同
- 專賣店吊頂裝修合同
- 機場建設渣土運輸協議范本
- 遼寧雕花板崗亭施工方案
- 臨時承接合同范本
- 偽造員工勞動合同范本案例
- 基金托管合同范例
- JJG 921-2021環(huán)境振動分析儀
- GB/T 308.1-2013滾動軸承球第1部分:鋼球
- 中藥炮制學-第五、六章
- 中國風軍令狀誓師大會PPT模板
- 小兒高熱驚厥精品課件
- 2023機械工程師考試試題及答案
- 2022年電拖實驗報告伍宏淳
- 豐田汽車戰(zhàn)略規(guī)劃與戰(zhàn)略管理體系研究(2021)
- 公共政策學(第三版)-課件
- 冷卻塔是利用水和空氣的接觸
- 我的家鄉(xiāng)--安徽亳州.PPT
評論
0/150
提交評論