YJ智能框架--面向对象方面编程
中文摘要
摘要:面向對象編程作為主流編程范型,在Web系統設計實現中得到了很好的應用,但同時也早已暴露出不足,針對面向對象編程思想的不足人們提出了面向方
面編程。面向方面編程很好地解決了橫切關注點的問題,從一個更高的角度對系統進行了分解。本博客較深入地分析研究了面向方面編程與面向對象編程之間的關系,探討了面向方面編程的技術實現原理,對基于面向方面需求分析、設計、開發相關理論做了進一步的探討和研究,著重研究了面向方面編程在Web系統中的應用。
針對Web應用系統特點,本文分析設計了一種基于MVC的多層系統架構,并著重分析了系統中具有共性的一些系統級橫切關注點,對象持久化、數據庫連接維護、緩存和權限認證,及它們與Web系統各層之間的關系。YJ智能框架針對這些橫切關注點設計出了具體的解決方案。本文最后對比分析了面向方面編程與面向對象編程,總結了面向方面編程的優缺點結合實踐應用提出了一些基于面向方面編程的最佳實踐
第一章 緒論
1.1選題背景及其意義
基于B/S多層架構的Web系統,由于更高的安全性、可維護性等特點已經取代C/S架構成為企業應用的主流,隨著社會的發展,各行各業信息化程度越來越高,企業應用需求不斷發展變化,軟件應用系統需要實現的業務操作越來越復雜龐大,同時也對軟件各方面性能,可擴展性、可維護性、安全、穩定等提出了越來越高的要求。應用需求的發展不停地挑戰著計算機軟件技術的發展,軟件編程方式經歷了從最初的面向機器、到面向過程、再到面向對象,每一種新的編程方法學的發展,都為人們提供了一種更為自然的方式,可以將系統需求映射為計算機語言的編程結構。這些編程方法學的不斷發展可以讓人們創建更加復雜的軟件系統。面向對象編程(Object-Oriented Programming簡稱OOP)相比傳統編程模式在構建Web系統時顯出了它的強大功能,成為了當前主流的編程范型。OOP通過分析、抽象出一系列具有一定屬性與行為的實例,并通過這些實例之間的協作完成系統的功能,按照功能或行為對軟件系統進行分割,架構整個系統,很好地解決了數據與操作模塊化編程,相比以前面向過程編程大大解耦了軟件系統。OOP發展到現在出現了很多優秀的面向對象語言,如java它是一種純面向對象語言,而且java在針對企業應用web系統中提供了一整套基于面向對象的解決方案和技術規范包括有、、、、、等等越來越多的系統采用基于技術的實現也成為人們主要的選擇。然而隨著軟件系統的用戶需求的不斷發展日益顯出了自身的不足。技術中最重要的概念是類和對象。類對數據及其相關操作進行了封裝封裝帶來了隱藏實現細節的好處但同時也限制了設計開發的靈活性和系統的擴展性。只能從業務流程的單一方向設計和實現系統而實際應用系統中業務繁多很多業務都需要執行共同的操作。日志就是一個典型的例子基于傳統實現的系統會出現日志類似操作的相關調用代碼分散在程序中多處引起代碼混亂對系統維護和理解造成較大困難同時也增加了開發人員額外的負擔。這種www.docin.com北京交通大學碩士學位論文第一章緒論編程模式還使得在多個類的方法中擴展類似操作變得非常困難喪失良好的擴展性。針對編程模式的不足人們提出了面向方面編程簡稱它把實現類似日志這樣的操作看作一個橫切面利用可以很好地解決這種橫切問題被很多人看好認為是繼之后計算機編程學上又一場重大的革命力求站在一個更高的角度分解應用系統更接近真實世界架構系統解決所處的困境。研究及其應用現狀概念最先是由領導的施樂公司帕洛阿爾托研究中心即屺一個研究小組于年提出并隨后又申請了的專利。但是思想產生已經有相當長的時間了早在年開始觚屺的研究人員就對面向對象思想的局限性進行了分析形成了概念的雛形甚至還有其他人聲明更早的時候就做過與類似思想和方法論的研究如于年發表的論文中提到不修改已有代碼如何擴展已有系統功能。隨著研究的深入被越來越多的人關注一個項目組近年來也一直花大力量研究還有很多關于的開源項目得到了的支持如目前最成熟技術—一語言也得到了相關項且組的支持公司也推出了他們的框架。目前和合并成了。也引起了微軟公司相當大的關注他們也正在加大力量對進行研究甚至在體系中已經不同程度應用了類似的思想。正在逐漸形成一套完整的程序設計思想各種平臺的技術也應運而生。平臺是應用最早的也是目前運用最為成熟的出現了很多支持的框架如、、和基于的擴展語言這里列舉的四種工具都是基于的實現它們被公認為是走在的最前列。然而作為一種新的編程思想和模式仍有待進一步探討
研究基于設計開發的相關理論目前也很欠缺的具體實現技術還有很多不成熟的地方更沒有一個真正的語言所有這些導致距離廣泛應用仍然有相當大的距離。www.docin.com北京交通大學碩士學位論文第一章緒論大多數應用仍然處在實驗研究階段僅僅是作為一個輔助工具在被使用在系統開發中的應用也非常有限大多數系統都只是應用工具提供的框架實現解決了某些特定的功能。如企業項目中廣泛采用的框架利用框架中提供的功能實現了事務處理與商業業務邏輯的分離。本文研究重點本文將與思想進行對比研究分析它們之間的關系對基于思想的設計和開發做進一步的探討和研究并分析了系統的特點基于模式重新設計架構系統研究系統中具有共性的一些橫切關注點利用語言設計實現基于模式處理這些橫切關注點的方案。本文結構安排本文共分為以下五章第一章是緒論部分主要介紹了選題背景及其意義分析了當前主流編程范型模式的局限性介紹本文的研究對象及其研究和應用現狀并提出了本文的研究重點和研究方向。第二章是本文對的理論探討研究部分主要闡述了思想及其相關概念分析了模式與模式的關系探討了技術實現原理對設計開發理論做了進一步的探討和研究。第三章基于技術設計分析系統架構的特點遵循多層架構、設計了一種系統架構分析了系統中一些具有共性的、重要的橫切關注點數據庫連接維護、對象持久化、緩存、權限認證及它們與系統各層之間的關系。第四章是本文的設計實現部分結合第二章對理論的研究基于第三章架構設計和橫切關注點的分析采用基于的擴展語言——對緩存、對象持久化、數據庫連接維護包含事務處理和權限認證幾個橫切關注點給出了模式的設計實現方案。第五章與傳統模式的系統架構進行對比分析了基于模式架構系統的特點突出顯示了在耦合性、可讀性、可擴展性三個方面的www.docin.com北京交通大學碩士學位論文第一章緒論優越性同時也提出了基于設計開發中一些不足的地方結合自己實驗體會列舉了一些最佳編程實踐條款。最后是本文的總結總結一些優勢并且提出了進一步研究工作www.docin.com北京交通大學碩士學位論文第二章設計、開發研究第二章設計、開發研究基本概念發展至今并沒有在業界形成統一的認識目前也沒有一個確切的定義盡管如此已經顯示出了它強大的優越性。的目的是克服的不足實現系統更好的解耦從一個更高層次更自然地構建系統提高開發效率增加系統的可維護性和可擴展性。的不足就在于類對數據方法的絕對封裝性所帶來的限制針對實際應用系統中存在著大量的類似于日志這樣的橫切面這種限制使得很難為多個方法統一進行維護和擴展。而利用一種“橫切”的技術剖開類中封裝的多個方法可以靈活地對這些方法進行切入新的業務代碼、擴展新功能點同時在具體開發實現時不需要對原有的類代碼作修改正如所提到的從外部往類中的方法批量擴展新的功能點而不用修改原有的程序代碼。以日志操作為例可以用圖代表面向對象編程的實現圖代表的實現方法包含日志操作調用日志操作方法核心業務邏輯里查墨堡圖面向對象編程實現模式日志操作方法廠———通過相關技術日志邏輯二百而牙西痙一方法方法包含日志操作調用核心業務邏輯圖面向方面編程實現模式從兩圖的對比可以看出面向對象編程從單一縱向構建系統圖中方法和方法代碼中需要顯式地包含對日志邏輯操作方法的調用一旦類似業務方法數量龐大將導致日志調用相關代碼分散在程序中各處產生混亂而在面向方面www.docin.com北京交通大學碩士學位論文第二章設計、開發研究編程模式中增加了一個橫切面從縱橫兩個方向分解系統圖方法和方法不再需要顯式地調用日志操作日志操作由相關技術自動織入其內可以認為面向方面不僅僅封裝了日志操作的實現邏輯而且也封裝了對日志實現邏輯操作的調用相比之下面向方面劃分系統更加自然系統耦合性進一步降低。在概念產生和發展的同時產生了一些新的術語關注點如圖中所示日志邏輯和核心業務邏輯等這些功能點稱之為關注點每一個關注點都是我們需要關心實現的一個邏輯功能點。其中核心業務邏輯這些關注點是實現主要業務邏輯的核心操作稱之為核心關注點而類似日志邏輯這些關注點它通過相關技術“橫切”織入程序中各個需要它的地方稱之為橫切關注點。連接點圖中方法和方法需要切入日志操作的地方都是連接點它是程序中一個精確的執行點。方法體調用或者執行、對屬性賦值或者讀取等代碼處都可以看作連接點可供織入橫切關注業務邏輯連接點為提供了系統功能擴展的空間。通知包含橫切關注點的業務邏輯模塊可以定義為一個通知通知中還定義了橫切關注點和核心關注點切入關系、如何組合實現完整的商業業務邏輯。從不同的角度對通知可以作出不同的分類通常根據切入方式和切入位置分為以下三種前通知、后通知和周圍通知在本文第四章中都有具體的應用。切入點就是定義一個由此點切入一些具有共同特征連接點所組成的集合橫切面這些連接點都需要切入同一個橫切關注點的業務邏輯。一個大的軟件系統中通常有很多不同的橫切關注點分別對應不同的橫切面面向方面編程需要為每一個橫切面定義一個切入點定義切入點的關鍵就是精確捕獲橫切面對應的所有連接點。方面切入點和對應的通知結合在一起就是方面面向方面中方面的概念和面向對象中類的概念很類似類是封裝模塊化了屬性及屬性相關操作而方面是封裝模塊化切入點及切入點處被切入的通知。甚至在語言中方面實現代碼形式也跟類的很相似但方面是從類外面實現對類中方法的擴展在方面內部實現對橫切關注點業務邏輯的調用同時描述了橫切關注點與核心關注點的www.docin.com北京交通大學碩士學位論文第二章設計、開發研究切入關系。另外∞還允許方面跟類一樣定義屬性和方法在本文第四章的具體實現中將會看到很多這樣的應用。織入將橫切關注點與核心關注點按照方面的定義進行組合成完整的業務邏輯這一過程在中稱為織入。不同實現技術和不同織入需求織入過程可以在不同的階段完成編譯之前、編譯之時、運行之時。上下文主要是指核心關注點方面連接點處一些信息通常指核心關注點業務方法的調用實例、方法名、調用執行的實參等這些信息通常會被橫切關注點切入時獲得以供在通知中實現橫切關注點的業務邏輯。圖術語示意圖以上術語基本得到業界的認同基于這些術語的技術特征組成了最基本的技術當前絕大多數具都實現了這些技術。語言對語言做了一些擴展在新的語法要素中幾乎可以找到與這些術語一一對應的的元素。與關系的介紹面向對象編程是當前主流編程范型是編程學上的一次意義重大的革命面向對象技術將現實世界問題領域與軟件編程中對象進行映射對現實世界中的www.docin.com北京交通大學碩士學位論文第二章設計、開發研究問題進行分解、簡單化使之符合人類的思維習慣能夠自然的表現現實世界中的實體和問題面向對象編程在軟件編程學上具有重要的意義。相比以前面向過程語言面向對象語言具備很多新的特點人們利用面向對象的封裝、繼承、多態思想可以更加有效、自然地構建復雜的軟件系統。的優勢相比傳統編程方法主要體現在以下幾個方面高度重用性。面向對象語言利用類封裝了數據和相關業務操作實現了良好的模塊化提高了系統代碼的重用性“對象模型的使用不僅鼓勵軟件的復用而且還鼓勵整個設計的復用同時也導致可復用應用框架的建立”。面向對象編程使得系統帶來很大的靈活性。代碼結構的改良。由于類的高度模塊化和良好的封裝性“類是理想的模塊化機制它的獨立性好修改一個類通常不會引起軟件的整體變化往往只需對局部作一些修改”。由此帶來一系列的好處耦合性降低、代碼易于理解、可維護性和可擴展性增強、易于測試和調試。、較易開發大型軟件產品。面向對象編程不僅有利于實現復雜系統的細化而且也有利于團隊分工、共同合作許多軟件開發公司的經驗都表明當面向對象方法學用于大型軟件開發時軟件成本明顯地降低軟件的整體質量得以提高。然而發展至今也暴露出了思想的局限性由于類固有封裝特性忽略了類與類之間、方法與方法之間一些共同的實現細節橫切關注點在面臨這些問
題時會導致相同的代碼片段分散在程序中各處造成代碼糾結在大型的企業應用系統中尤為明顯。面向對象編程的發展概括起來經歷了三個階段第一階段以類為中心設計開發利用類的封裝性和繼承性很好地實現了系統代碼復用性第二階段以接口為中心可以稱為面向接口的開發更注重系統的耦合性第三階段以設計模式為
中心基于組件的開發進一步提高整個系統設計的復用性。盡管如此面向對象語言仍然無法徹底擺脫在解決橫切關注點時的困境。是的補充和發展就是針對的思想局限性設計出的一種新的編程模式是對技術的補充和發展。它與追求的共同目標都是實現軟件進一步解耦、提高軟件
復用性、增加軟件的可擴展性減輕開發者負擔、提高開發效率。注意到軟www.docin.com北京交通大學碩士學位論文第二章設計、開發研究件系統需求中存在大量的橫切關注點而解決橫切關注點問題時卻陷入代碼
混亂的尷尬處境只能封裝橫切關注點的業務邏輯實現而有關橫切關注點的調用代碼卻會分散在程序中各處分散了核心業務開發人員的精力和注意力不僅增加了開發人員的負擔而且對系統各種性能也造成較大的損傷。不僅僅封裝了橫切關注點的業務邏輯實現而且還封裝了對它的調用有效地實現橫切關注點與核心關注點的解耦提高了程序的模塊化程度。與現有技術不是一種競爭關系而以及相關技術為基礎才能實現的開發模式。有了這一新的思想工具并不意味著對開發人員的面向對象編程要求可以降低相反非常依賴于編程模式中良好的編程習慣這好比在開發模式中實現類的方法時仍然需要遵守結構化編程模式。思想模式并不是萬能的它并不能解決開發中所有的問題能夠很好解決的問題強行追求的實現往往只能是弄巧成拙。對的發展著重體現在對軟件系統需求層次上的劃分是從單一的縱方向構建軟件系統“一切皆為對象”開發者用一組實例以及這些實例之間的關系組合構建軟件系統實例的組合按照業務流水單一方向進行。而注意到了系統中另外還存在很多“橫切面”增加了從橫方向構建系統這不僅大大降低了系統耦合性而且可以非常方便開發人員對系統功能進行擴展在不影響現有代碼的情況下通過增加新的橫切面就可以實現。將使得開發者可以將應用需求更自然地映射到編程模式之中。對封裝性的影響通過定義類來加強系統的封裝性隱藏實現細節就是為了對系統進行更好的解耦而橫切關注點是模式中被封裝的實現細節中共同的部分模式的封裝導致放棄了對這些橫切關注點的模塊化。采用“橫切”技術切入中類的方法為開發人員提供了破壞面向對象中類固有封裝性的機會然而開發人員利用切入方法內部時只要運用恰當相反可以帶來更好的封裝性正如所言“我相信應該做的是給程序員提供能寫更漂亮的程序的工具而不是施加足夠的安全機制讓他們不能編寫糟糕的程序”。模式就是這種提供更好的模塊化程序的工具。應該注意到模式中多個方法都封
裝包含對橫切關注點的調用并不合適這樣的封裝會引起代碼混亂的目的www.docin.com北京交通大學碩士學位論文第二章設計、開發研究正是打破這種不合適的封裝將對橫切關注點的調用封裝在“方面”里面將被封裝的實現細節的共同部分抽離出來實現更好的模塊化降低系統耦合性。從某種意義上來說封裝了系統的靜態部分封裝了系統的動態部分。因此單純討論是否破壞的封裝性并沒有什么意義中方法的絕對封裝有著它固有的思想局限性而加入卻可以使系統的封裝性做得更好。與設計模式的關系設計模式是面向對象語言開發經驗的積累各種不同的設計模式都定義了解決某一類問題的一種較好的策略著名的《設計模式》對設計模式做了歸納和總結它不僅提供了更好的設計方案而且還提供了基于面向對象軟件設計交流的工具。設計模式通過最大程度地利用面向對象的特性諸如利用繼承、多態對責任進行分離、對依賴進行倒置面向抽象、面向接口最終設計出靈活、可
擴展、可重用的類庫、組件乃至于整個系統的架構。在設計的過程中通過各種模式體現對象的行為、暴露的接口、對象間關系、以及對象分別在不同層次中表現出來的形態。然而鑒于對象封裝的特殊性“設計模式”的觸角始終在接口與抽象中大做文章而對于對象內部則無能為力。而且由于設計模式過于依賴接口和追求抽象與實現的分離有時會給人帶來設計的兩難抉擇簡單實現或者靈活設計。是對設計模式的延續突破了對象的封裝將系統中不同的關注點分為核心關注點與橫切關注點并將之映射成面向方面的一種編程方式。并不需要借助接口和抽象而是利用橫切技術直接深入到對象內部截取方法之間傳遞的消息可以隨意織入各種通知在不改變原有類的代碼基礎上實現該類功能的擴展。之所以較設計模式功能更加強大使用更加簡單關鍵就是在于設計模式是對面向對象編程語言的一種編程技巧而面向方面思想是對面向對象思想的進一步發展模式更接近現實世界構建系統。技術實現原理目前沒有純粹的語言絕大多數的工具和擴展語言都是基于面向對www.docin.com北京交通大學碩士學位論文第二章設計開發研究象語言的擴充在領域實現主要有兩種方式動態代理實現和基于面向對象語言的擴展。動態代理實現標準類庫包中有代理類和調用處理柄接口類中提供了方法。該方法可以產生一個代理實例并且代理實例與被代理實例具備相同接口被代理實例就是核心業務方面的實例因此動態代理實現都要求為所有核心業務類定義相應的接口。兩者的代理關系通過實現接口的方法來確定在核心業務實例被代理的時候可以實現切入橫切業務邏輯還可以攔截核心業務邏輯的執行同時方法中的參數也為切入時捕獲核心業務方面上下文提供了條件。這些具體實現通常封裝在一個工廠類中程序中需要新建核心業務實例時由該工廠提供一個代理實例。廠的實現代碼示例如下利用的代理機制獲取代理對象。代理對象與被代理對象具備相同的接口其中實現了接口示例代碼如下】恤www.docin.com北京交通大學碩士學位論文第二章設計、開發研究。臟方法調用前可以切入相應橫切業務邏輯還可攔截核心業務邏輯地執行”核心業務方法執行之前可以切入橫切業務邏輯”調用核心業務邏輯方法在方法調用后可以切入相應橫切業務邏輯亂“舯”核心業務方法之后可以切入橫切業務邏輯”
動態代理實現時捕獲上下文可以在方法中進行方法有三個參數】分別暴露了核心關注點被調用方法的信息被調用方法所在的實例被調用方法被調用方法的行參列表。通過語句“”的調用執行核心業務中被捕獲的方法在該語句前后就可以切入相應的橫切業務邏輯甚至不執行該語句實現攔截核心業務方法的執行。假定程序中有這樣的核心業務類及其對應的接口如下蛔”執行核心業務方法”測試代碼如下執行結果如下核心業務方法執行之前可以切入橫切業務邏輯執行核心業務方法核心業務方法之后可以切入橫切業務邏輯下圖描述了動態代理機制實現原理www.docin.com北京交通大學碩士學位論文第二章設計、開發研究核心豁垂務盍一一一一一一一一…一…一一一‘通過獲取接口類型的代理對象被代理實例為類的實例■………………一圖動態代理實現原理圖動態代理實現機制基本上都利用了這一原理并配合文件的使用同時利用的反射機制提供了一個框架。這種實現機制最大優點在于不需要額外的編譯器和新的語法學習、、這幾種工具都是基于動態代理機制的實現然而在實際應用中存在以下問題由于代理實例的引入增加了額外的類加載和對象的創建雖然各種框架都采取很多措施進行優化但對性能產生的影響還是比較大。由于大量反射機制的應用對程序的容錯和效率也造成了較大的影響。動態代理實例的產生需要為原始類定義接口并且對象的產生必須通過特定的工廠產生同時還需要配置一些文件在文件中定義連接點的捕獲、橫切方式和切入粒度等等增加了開發者負擔在使用上不夠靈活功能也不夠強大。動態代理由于利用反射機制方法來調用核心關注點方法無法支持基于靜態方法的連接點捕獲。動態代理主要是對方法的代理無法支持對基于屬性的連接點捕獲www.docin.com北京交通大學碩士學位論文第二章設計、開發研究在動態代理框架應用中框架是其中杰出的代表在企業應用中被廣泛采用提供了一個輕量級的容器可以用來管理業務對象在框架內可以很方便地實現面向方面事務管理使其與核心業務邏輯分離。另外還有一種實現的方法就是利用班庫利用它的代碼增強功能可以動態地為中的類生成子類實現原理基本類似只是這種實現方式可以不再依賴接庫在框架中實現對象持久化操作有很多應用在后續章節將作進一步的介紹。。基于面向對象語言的擴展語言是基于面向對象語言的擴展在語言基礎上增加新的關鍵字來實現技術如方面、切入點、前通知、后通知、周圍通知等等提供專用的編譯器來時識別這
些新語法要素在生成字節碼前編譯器修改需要被切入方法的相關源代碼從而實現“橫切織入”然后進行正常面向對象語言的編譯生成字節碼。的優點非常突出這種類似預編譯的靜態織入方式完全消除了動態代理機制對性能的影響。與代理機制實現相比不僅可以捕獲基于方法的連接點而且還可以捕獲基于類屬性的連接點甚至還可以很好支持基于靜態方法連接點的捕獲。同時由于新語言要素的加入可以很方便地定義切入點、通知等與思想術語相對應的語言成分利用新的關鍵字捕獲上下文也變得非常容易、自然可讀性也更好更加靈活地發揮了思想的功能特性。同時保持著原始語言的編碼風格開發人員很容易就可以運用自如充分將面向方面編程思想應用到實際編碼中來。本文認為是目前最接近未來純粹的語言已經被越來越多的人看作是事實上的標準也得到越來越多技術的支持例如以上版本已經完全集成了。當然也有它不足的地方由于靜態式的織入往往一個橫切關注點橫切了多個類的方法程序中只要對代碼做一點點修改所有相關的源文件都需要重新編譯在實際應用中也會帶來一些不便。有關的一些語法特點在本文后續章節具體設計實現中還有進一步的介紹。需要說明的是的技術實現并不是本文的研究的重點但是任何一種新的www.docin.com北京交通大學碩士學位論文第二章設計開發研究理念在其產生早期技術實現都非常重要。作為一種新的編程思想理念非
常需要技術實現的支持好的技術實現有利于理念的推廣“理論與實踐相結合”使其在實踐中不斷地發展和完善。設計開發探討與研究基于面向方面需求分析面向方面編程核心思想就是分離核心關注點與橫切關注點實現分別專注這兩個方面編程對軟件需求的深入理解是軟件開發獲得成功的前提條件面向方面的需求分析重點是對用戶所關注的邏輯功能進行分類并分別映射到中的核心關注點和橫切關注點。如何將業務流程中主要業務流程同它的分支流程、非核
心業務功能分離開來分別作為核心方面和橫切方面并明確它們之間的橫切關系。有關這方面的理論目前正在不斷的發展和完善之中和合著的—提出了基于用例圖分析和合著的—提出了一種方法進行分析與設計。基于的設計開發權限認證、事務、日志等等已經普遍被認為是軟件系統中橫切粒度很大的系統級橫切關注點根據系統實現的具體業務功能往往還
存在各種粒度不一的業務級橫切關注點面向方面需求分析關鍵就是在需求階段
盡可能地識別出各種關注點分離系統的橫切方面和核心方面將整個應用系統進行面向方面的模塊劃分降低整個系統耦合性減少設計開發的難度。將原始需求信息比作一束光束那么識別關注點識別過程可以用三棱鏡法則來形容穿越三棱鏡的光束需求信息經過三棱鏡折射關注點識別照射出來不同顏色的光束關注點實現基于面向方面的需求分析如下圖所示www.docin.com北京交通大學碩士學位論文第二章設計開發研究圖關注點識別三棱鏡法則設計層次良好的架構實現核心業務流程分離出去橫切關注點業務邏輯后可以專注核心業務流程進行架構設計和編碼架構設計的層次性和編碼的規范性很大程度上影響“橫切織入”的復雜度。核心關注點方面業務流程仍然是系統設計的重點在系統中通常采取基于模型一視圖一控制多層架構在業務層根據業務的復雜度還可能再分層這種多層的架構不僅降低了系統的耦合性和復雜度而且也非常有利于對不同層的代碼切入不同的橫切關注點一般來說不同的層都有它不同的“橫切面”如權限認證通常作為控制層的橫切面而事務處理作為業務層的橫切面。傳統的面向對象設計通常還會增加很多接口來進一步解耦層與層之間的關系、增加系統的靈活性和擴展性思想并不依賴接口它提供了新的開發模式和語言工具使系統設計和開發更加靈活同時可以在不改變原有代碼的基礎上增加橫切面利用“橫切”技術自動將新的功能切入系統中提供一種全新的系統擴展方法。因此可以對傳統的接口設計作一定的簡化力求系統架構清晰簡潔。定義切入點切入點定義了供通知切入的一批連接點連接點的數量決定了橫切粒度每一個連接點都是系統的功能擴展點針對某一個橫切關注點如何準確的捕捉需要將其切入的所有連接點是定義切入點的關鍵。中同時支持基于方法和屬性的連接點捕獲通常主要根據以下幾種方式進行捕獲。在中主要是根據方法和屬性原型定義的特征定位相應的方法或者屬性。方法原型名稱格式為“訪問修飾【】返回值類型包名類名方法名形參www.docin.com北京交通大學碩士學位論文第二章設計開發研究列表”屬性的原型格式“訪問修飾【】類型包名類名屬性名”。通過對它們的匹配捕捉方法的調用、執行和屬性的讀取不同的具可能采用不同的匹配技術中使用了正則表達式進行匹配而語言中定義了三種專用的通配符’代表了除‘’之外任意字符串‘’代表了任意字符串包括‘’字符‘’代表了該類及其所有的子類Ⅱ中還提供了特殊的關鍵字來匹配構造函數。面向對象中的方法有兩種狀態方法的定義和方法的被調用根據這兩種狀態分別定義了兩種連接點在方法體的首尾進行切入編譯器可以直接批量修改被捕獲的方法體代碼該方法一旦執行就會自動調用橫切業務邏輯在方法被調用的時候在調用處前、后進行切入橫切業務邏輯編譯器會在被捕獲的調用處前后加入相應橫切代碼。這兩種切入方式都可以攔截被捕獲業務方法的執行。面向對象中對屬性的操作有兩種讀取和賦值根據這兩種操作也分別的定義了兩種連接點捕獲對屬性的讀取操作捕獲對屬性的賦值操作。方法、屬性被調用處所在代碼即方法被調用或者被定義、屬性被讀取或者賦值時所在類名含包名或所在方法名中提供了和兩種關鍵字分別定義這種匹配。通常和配合使用。中提供關鍵字和定義調用流程之間的關系所謂流程關系例如方法的方法體中有調用方法就認為執行的流程中存在對的調用不僅類的方法中存在流程關系方面各個切入點也存在流程關系。和的區別在于連接點自身是否處在自己的流程中。利用切入點的流程關系可以定義當同一連接點被不同切入點捕獲時的橫切業務邏輯的切入順序還可以控制嵌套切入。將以上各種匹配特征進行邏輯組合實現更加靈活的匹配方式語言中利用與、或、非三種邏輯操作符進行組合匹配。一個好的編碼規范對連接點的捕獲很有作用特別是系統架構層次的劃分和類www.docin.com北京交通大學碩士學位論文第二章設計、開發研究所在包的組織及各種包名、類名、方法名的命名方式。組織核心關注點與橫切關注點的上下文橫切關注點與核心關注點業務邏輯在代碼實現形式上完全分離通過“橫切織入”將它們組合在一起實現完整的業務流程所以橫切關注點方面就需要獲得核心關注點方面上下文才能共同處理流程中的數據信息。方法調用的連接點上下文主要為被調用方法所在的實例、方法的參數、方法名和方法返回值等等。通知中實現橫切關注點業務邏輯處理的數據都是正對這些上下文信息在中提供了和關鍵字可以在定義切入點的時候將方法的實例和參數顯示的暴露給橫切方面在通知實現代碼中還可以獲得函數返回值另外在通知體中還提供了關鍵字該關鍵字的兩個方法和可以分別獲取被調用方法的名稱和所有實參列表。另外還可以利用模式在橫切方面和核心方面之間傳遞上下文信息。中類實現了模式定義一個變量就可以實現以當前線程為關鍵值保存各自的數據信息。在系統中用戶每一次請求提交服務器端都需要完成一個完整的流程控制層接收請求、調用業務層處理相關業務、業務層連接后臺數據庫進行處理返回處理結果給控制層、控制層將
處理結果交予顯示層對用戶作出響應。流程之中存在各種連接點需要切入橫切業
務邏輯而在用戶的一次會話期間整個完整業務流程中不管系統執行核心業務邏輯還是橫切業務邏輯絕大多數都是在一個線程之中根據這一特點利用變量就可以很方便在核心方面與橫切方面之間進行數據傳遞在本文的設計實現中多處使用了該類型變量在橫切方面中實現上下文的捕獲。www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析第三章系統架構設計與分析系統架構設計原則在基于的系統架構設計中有許多好的原則可供遵循在本文的設計中同樣遵循著以下一些設計原則多層架構原則。將業務與數據、現實分離降低系統的耦合性系統通常都采用基于的多層架構各層都對其他層隱藏自己的實現細節盡可能隔離復雜性。簡單原則。如果能用的工作完成的工作則選擇較簡單的解決方案。系統分層的過多也會帶來實現的復雜性一些重量級的組件不加選擇地使用也會增加系統實現難度、減少系統的可維護性沒有充足的理由就不要使用。模塊化原則。“模塊化是被分解成具有內聚性但松散耦合的模塊的系統特性”模塊化對提高系統重用性的具有重要意義可以增強系統的可讀性和可維護性。在設計和實現中我們會作很多工作來達到更好的模塊化。整體架構設計系統越來越多地應用于大型商業領域中業務復雜系統極為龐大人們更加注重追求系統進一步解耦、提高系統的可維護性和可擴展性。系統的運行模式一般為基于客戶端向服務器提交請求由服務器端負責所有業務處理、訪問后臺數據庫然后對用戶作出響應服務器端集中了幾乎所有的業務邏輯客戶端通常只負責顯示功能習慣稱之為瘦客戶端因此系統架構設計集中在服務器端邏輯設計。本文基于技術探討設計系統的架構是針對在企業應用系統的一套完整的技術規范圖是標準模型。www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析圖標準模型標準模型規定使用做為業務處理組件充分體現了在并發、分布式計算上的能力但本身使用過于復雜用做業務處理過于死板定義的標準確實很強大很多子標準制定得非常出色但是同時也很復雜總
是顯得過于臃腫結構笨拙實用性也較差反倒是非標準的模型比較有影響力這一領域一些開源項目占據了主流位置。面向對象技術已經相當成熟而且穩定人們在面向對象編程開發實踐中積累了很多寶貴的經驗總結出了大量實用性很強的設計模式本文基于技術構建的系統遵循的多層結構進行架構系統如圖所示圖系統多層架構其中頁面負責客戶端瀏覽器顯示所有來自于客戶端的請求統一交由相應的控制器處理收集請求數據并調用業務層業務操作進行相應處理然后將處理結果數據通過對象轉發至待顯示的頁面頁面最后在客戶端瀏覽器進行顯示以響應客戶的請求。其中服務器端應用程序需要通過連接數據庫而業務層業務對象簡記為并不直接訪問數據庫而是先由封裝數據庫連接在中www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析獲取數據庫連接實現讀取數據庫的各種基本操作實例讀取數據庫時先獲取一個實例通過該實例訪闖后臺數據庫。整個架構中核心方面流程如圖順序圖所示圈圉圈圖系統核心方面順序圖詳細設計分析數據層在數據層需要解決面向對象語言訪問關系型數據庫的問題建立映射是有必要的將對象語言訪問關系型一些復雜、繁瑣的操作封裝隱藏起來。映射就是建立起“關系數據庫中的表”與“面向對象語言中的值對象類”之間的對應關系值對象類∞簡記為就是一個普通的類它只有屬性及屬性相應的和方法數據庫中每一條記錄都映射成一個實例數據庫中表的字段通常都對應到實例中相應的屬性。基于映射思想訪問數據庫時將針對記錄的基本操作增加、刪除、修改、查詢映射為針對的相應操作傳統的語言使用也會作些改變表名由類名代替、字段名由屬性名代替。在的開源項目中已經有很多優秀的框架、工具實現了映射其中以框架應用最為廣泛很好地實現了映射封裝了數據庫連接提供了與類似的語言。可以在等框架基礎上封www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析裝的實現除了封裝基本操作訪問數據庫以外還需要提供一些有關事務和數據庫連接維護的方法如下手斷是否擁有數據庫連接胴矢取數據庫連接關閉數據庫連接開啟事務提交事務回滾事務通過的封裝解決面向對象語言訪問關系型數據庫的問題隱藏了實現細節使得業務層與后臺數據庫迸一步解耦。中的這些基本操作方法供業務層實例調用簡化了業務層對數據庫的訪問。而在業務層集中了所有具體商業業務邏輯實現可以對實例的各屬性值進行修改這些修改操作都需要對應到中對相應數據庫記錄的更新操作這一操作稱為對象持久化操作。在中提供了方法由該方法封裝持久化操作邏輯。在業務層調用實例的方法修改實例的屬性值時就需要調用方法將修改后的值持久化到數據庫中傳統的實現代碼示例如下通過∞方法修改產品的名稱脯修改后的信息保存在數據庫中很明顯這樣做放任了一個橫切關注點——對象持久化邏輯分散在程序中多處導致程序員會多次調用這一操作同時還需要開發人員自己判斷是否需要進行持久化程序中有些實例并不是由數據庫記錄映射而來的可能是臨時新建的對象對于這些實例的修改不需要持久化無疑增加了開發人員的負擔。因此關于對象持久化方面的工作有必要將這一橫切關注點分離出來用方面封裝它的實現和調用。業務層業務層由實例業務實例組成在每一個類中實現相關的一批業務操作如前文所分析每一個類訪問數據庫都需要獲取一個實例通過www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析實例訪問數據庫。基于這一特點可以為所有的類定義一個父類業務層類圖如下圖業務層類圖中的屬性設為保護類型可以被它的子類使用。同時利用中的方法也實現了對實例的一些基本操作的公用方法可以根據需要直接被控制層調用。控制層調用業務層中方法執行具體的商業業務一個完整商業務操作流程步驟通常如下獲取一個實例通過它獲得數據庫連接開啟事務如果該業務操作不進行寫數據庫操作可以不用處理事務執行具體業務邏輯捕獲業務邏輯執行是否有異常決定提交事務或者回滾事務絕大多數異常都不會進行錯誤恢復。關閉中的數據庫連接通常是將數據庫連接歸還數據庫連接池其中步驟、、、中數據庫連接維護包括事務處理是核心業務流程中的橫切關注點開發模式不管將它們放在層還是業務層每一個業務方法的調用或者執行都需要操作、提交或者回滾事務、關閉數據庫連接這些代碼片段分布在程序中的各處必然導致代碼重復、混亂加重開發負擔。究其原因就是思想在處理橫切問題上的局限性本文第四章將設計實現基于的解決方案。控制層在控制層接收客戶端的請求根據請求信息調用業務層業務操作完成具體業務www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析流程然后轉發至頁面響應客戶端請求顯示給用戶處理結果。在控制層主要是控制器的設計和實現通常一個用戶請求會對應一個控制器或者控制器中的一個方法。在標準的技術中簡稱可以充當控制器由的或方法接受用戶的請求并調用相應的業務層進行處理最后轉發至頁面由于每一個都需要在文件中作一些配置如果每一個用戶請求都定義一個與之對應則會加大的配置規模這在一個大型的企業應用系統中是無法忍受的。因此需要對此該層進行細化重新設計。在控制層至少做了兩件事地址解析找到對應的控制器處理請求控制器調用后臺業務邏輯返回處理結果。針對這一特點本文設計如下將控制邏輯抽取出來單獨定義實現控制類控制類中每一個方法都可以對應一種用戶請求。由于控制類主要是處理和對用戶可以為所有的控制類定義一個父類在此將它定義為抽象類示例代碼如下卸
∞廒取用戶請求的對象默認控制方法定義一個類充當所有控制類的派發器負責地址解析通過反射機制產生控制器類并調用相應控制方法處理客戶端提交的請求對象這樣文件中只需要對該類做配置即可。以下是控制層的順序圖www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析圖控制層順序圖在各個子類中所有的方法也存在一個橫切關注點用戶的每一個請求到達類方法在調用后臺業務邏輯之前都需要進行權限認證。當前很多系統中都利用過濾器來攔截用戶的請求進行驗證操作一般來說都能較好地滿足實際應用需求但它仍然存在兩個問題效率很低所有的請求都經攔截過濾。可讀性較差橫切業務仍然與核心業務糾結在一起。把權限認證作為控制器類一個橫切關注點基于實現可以提供一個更加清晰和高效的架構。訪問系統靜態數據一個大型的系統中業務操作復雜業務信息讀寫頻繁系統中仍然存在一部分數據信息是相對靜態的如業務基礎數據、國家地區城市、網站配置菜單、角色權限等信息這些信息變動很少但是讀取卻非常頻繁對于這一部分數據進行緩存減少對數據庫的訪問可以大大提高系統的性能。本文的設計方案就是在系統中增加一些工具類專門實現讀取這些數據工具類中所有的方法都定義為靜態的以便在頁面控制層中直接通過類名進行調用。在組織這些工具類時由于工具類中的方法仍然是實現一些業務操作故將www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析它們和類放在同一個大包路徑下包里建兩個子包和分別存放類和這些工具類。如圖●◆◆∞嘲◆圖靜態信息業務類圖對工具類中所有方法執行的返回結果進行緩存就可以實現性能的提高很顯然“緩存”也是一個橫切關注點如果直接在方法中實現緩存同樣出現代碼重復增加開發人員負擔。橫切關注點與層的關系分析通過以上分析我們確定了有四個橫切關注點分布在系統之中在系統層次設計實現中每個層所在的包路徑都不一樣顯示層主要都是一些?文件在項目中通常直接放在程序部署的根目錄下本文為這些文件統一定義包路徑包。控制層主要由一個類分發器和多個類控制器組成類所在的包路徑定義為。類所在的包路徑定義為控制層中所有的類都放在包下。業務層主要有兩種類靜態業務方法所在的工具類的包路徑定義為而其他業務對象類的包路徑定義為。前者可以調用后者系統訪問數據庫都需要通過具體的業務對象類的方法。數據訪問層通過封裝對面向對象語言對關系型數據庫的訪問隱藏映射的實現同時還需要在層定義各種值對象類供各層使用。圖是系統層和主要包的調用結構關系圖其中橫切關注點如圖中注釋部分所示www.docin.com北京交通大學碩士學位論文第三章系統架構設計與分析顯示層自控制層
留數據層圖系統各層、包之間調用關系圖中注釋部分標出了四個橫切關注點緩存、對象持久化、數據庫連接維護、和權限認證以及它們所需要切入的包。這些橫切關注點涉及系統中核心業務流程的三個層次控制層、業務層和數據層它們在開發模式下都解決得不太好。下一章本文將利用語言針對這些橫切關注點詳細設計基于的解決方案實現它們與核心業務完全分離。印璺彳邕嬰www.docin.com北京交通大學碩士學位論文第四章的應用與實現第四章的應用與實現本章采用語言著重針對第三章分析的橫切關注點進行詳細設計與具體實現對基于思想的設計開發做進一步的研究。實驗環境的搭建開發環境的搭建本文實驗基本軟件、硬件環境為操作性統專業版為內存為的的筆記本式計算機。軟件開發工具主要都是開源的如下面向對象語言版本為在的網站可以免費下載獲得它的安裝程序目前最新版本是但企業實際應用中并沒有被廣泛采用大多數仍然使用的版本。集成開發編輯工具在的官方網站可以免費下載獲得壓縮包解壓后就可以使用不用安裝。不僅開源免費而且功能非常強大提供了很多代碼輔助、跟蹤調試、項目管理等實用功能還有各類豐富的插件通過插件的擴展的功能將進一步增強使用更加方便。服務器采用的版本是的免安裝版的網站上可以下載獲得。配置非常簡單本文基本采用它的默認配置它對硬件性能沒有太高的要求通過的插件可以和組合在一起使用。數據庫使用的是免安裝版下載壓縮包后直接解壓運行系統就會在后臺啟動網絡服務同時下載最新的驅動在中通過就可以訪問該數據庫。在很多方面較以前版本有了很大的改進。開發環境的搭建目前雖然沒有純粹的語言卻出現了很多工具和基于面向對象語言擴展的語言其中以基于的擴展最為突出在使用上非常符合編碼習慣語言表達面向方面編程思想非常自然。利用預編譯www.docin.com北京交通大學碩士學位論文第四章的應用與實現實現了代碼的“橫切”織入不管在易用、效率、功能上都很出色已經逐漸被更多的人視為的實現標準越來越多的人傾向于用描述的思想可以很好將思想映射成具體的實現編碼。在的開發環境下搭建主要以下兩步編譯器的安裝本文實驗中采用的是當前最新的版本和合并后歸于基金下的項目。由和酬公司贊助添加了一系列特性以支持它的下載地址是一下載得到一文件在正常環境下包的默認執行程序為直接點擊該文件運行安裝安裝完畢后需要設置兩個環境變量在中添力Ⅱ在中添加插件的安裝插件需要和版本匹配本實驗中采用的下載的插件壓縮包為下載地址一—。插件的安裝非常簡單解壓包得到兩個文件夾和只要將這兩文件夾下的文件釋放到目錄中對應文件夾下即可。安裝好插件后的環境就可以支持使用語言進行開發了除了原有代碼系列輔助功能還提供很多的輔助功能方便基于進行項目開發。以下的詳細設計開發都是在該環境下進行實驗和測試的。對象持久化數據庫設計分析及映射第三章已經分析對象持久化的操作主要在數據層數據層封裝面向對象語言對關系型數據的訪問實現細節。以一個論壇系統為例數據庫中主要的表結構如下www.docin.com北京交通大學碩士學位論文第四章的應用與實現圖論壇系統主要的表結構這三張表將分別映射到面向對象語言中三個值對象類用戶表對應類帖子表對應類版塊表對應類。除了類與表對應類中也會有與表中每個字段對應的屬性每一個屬性都會有一組方法和方法。通過方法訪問值對象類的屬性值達到訪問數據庫相應字段的信息相應地對方法調用修改實例的屬性值時就會對應到對數據庫信息同步這一對象持久化操作如前文所分析是一個橫切關注點下面基于思想實現分離該橫切關注點與它的核心業務。橫切關注點業務邏輯設計分析分離對象持久化橫切關注點時需要解決以下問題只對從數據庫記錄中映射產生的實例進行持久化。系統架構中的已經封裝了面向對象語言對關系數據庫的訪問所有的實例都是通過中的方法獲取得到因此可以對所有的方法增加一個橫切關注點記錄所有由映射產生的實例借以判斷程序中實例是否需要實例化。需要確保每一條數據庫記錄在用戶的一次會話中只能映射成一個實例因此用戶每次讀取數據庫需要檢查讀取的實例以前是否已經讀取過如果讀取過則需要對已讀取的數據與數據庫進行同步不需要再次映射產生新的實例只需返回已讀取的實例即可這一操作應該在通過連接獲取數據集映射實例時進行。一個好的映射框架都應該實現該功能。www.docin.com北京交通大學碩士學位論文第四章的應用與實現業務層可能會對實例進行多個屬性值、多次的修改如果每次修改都更新數據庫進行持久化使得訪問數據過于頻繁而且低效對系統性能會造成較大的損害因此對實例修改的持久化操作應該放在事務提交之前統一進行盡量減少對數據庫的訪問。綜合考慮上述第點和第點假設用戶在一次會話中兩次訪問數據庫獲取了同一實例如果在第二次訪問數據庫前修改了第一次訪問數據庫獲取的實例那么第二次訪問數據庫將可能獲得臟數據而且獲取實例進行同步第一次獲取的實例將會覆蓋對實例值的修改。因此持久化操作需要在實例值修改后下一次數據庫訪問之前進行確保訪問數據庫獲得最新的數據。通過以上分析持久化操作方面編程需要在業務層捕獲兩類連接點調用類的各種方法訪問數據庫。在該連接點處切入的橫切業務邏輯持久化已經被修改后的實例同時記錄由映射新產生的實例調用實例的方法。在該連接點處設置標志實例相應字段已被修改。另外在業務方法執行完畢進行事務提交之前也需要檢查是否還有實例需要持久化下面章節中會討論事務處理橫切關注點的實現在事務處理方面的通知體中加入持久化邏輯即可。數據結構設計通過節的分析對象持久化業務邏輯主要是記錄所有映射產生的實例并同時記錄程序中對這些實例所作的修改在適當的時候進行數據持久化操作。設計以下數據結構保存本次會話期間所有相關實例信息www.docin.com北京交通大學碩士學位論文第四章的應用與實現圖持久化數據結構圖在該數據結構中每一種類型的實例對應中的一條鍵值對的類對象為鍵值又是一個對象。在值對象中的每一個鍵值對記錄實例及其所有修改過的字段。基于該數據結構設計持久化操作類—如圖◆圖類圖該類中主要定義了一個靜態變量和三個靜態的公有方法由于系統都是多用戶并發訪問對于每一個用戶訪問服務器都需要保存當前線程地持久化信息因此定義變量該變量中存儲的對象即為上文中卵對象。方法。記錄映射產生的實例如果該實例已經記錄則進行同步并返回該實例。方法。記錄某個實例已經被修改持久化操作會根據該修改情況同步數據庫中對應的記錄。。如果存在實例有字段被修改拼裝語句進行對象持久化操作同時清除實例字段被修改信息。捕獲對類方法的調用定義切入點捕獲在業務層對類方法的調用在這些被捕獲的連接點處切入橫切業務邏輯在方法被調用前檢查是否有實例需要持久化調用執行完成后同步已有映射產生的實例保證同一次回話中每條記錄對應一個www.docin.com北京交通大學碩士學位論文第四章的應用與實現實例再一次記錄映射產生新的實例由于連接點前后都需要切入橫切業務因此定義基于該切入點的周圍通知示例代碼如下定義切入點。’捕獲所有對類方法的調用。限定在業務層定義后通知腩所有已經修改過值的實例進行持久化同時記錄新映射生成實例該通知流程描述如下圖方面通知流程圖捕獲實例的方法在業務層類中捕獲實例的方法切入的橫切邏輯判斷實例www.docin.com北京交通大學碩士學位論文第四章的應用與實現是否來自數據庫記錄映射產生從而決定是否需要進行持久化操作。大致實現代碼如下定義后通知即可定義切入點曲?’。捕獲所有實例方法的調用限定在業務層廒取上下文實例定義后通知判斷實例來自數據庫記錄的映射決定是否記錄該實例需要持久化中的實現原理本人實際項目開發中幾乎都采用框架它很好地實現了映射的同時對持久化也做了很多工作較好地滿足了實際應用需求因此在項目實施中持久化橫切關注點并沒有采用本文基于的實現方案。然而從以上分析和本人對代碼各個局部實驗測試來看該方案從映射中分離出持久化相關橫切關注點程序結構更加清晰、易于實現、減少了開發工作量。而框架由于利用類庫為類生成代理類增強了類中的和方法這也是一種基于代理機制編程思想。是一個強大的、高性能、高質量的生成類庫它可以在運行期擴展類也可以動態實現的接口類庫也是開源的項目。利用實現原理與基于中的類的實現非常類似只是它可以不再依賴接口直接利用類生成一個原有類的子類則原有類的每個方法調用都會調用接口的】函數。在函數里就可以通過執行“”來執行實例原有的方法或者方法在該語句執行前后切入所需要的橫切業務邏輯根據需要甚至可以不執行核心業務操作都可以。示例代碼如下www.docin.com北京交通大學碩士學位論文第四章的應用與實現生成的子類被回調接口的方法。【】”調用日志方法”
利用類庫實現以上所有的實例都通過該工廠“方法創建獲得則該實例的所有方法體中第一行都會被切入語句”調用日志方法”同時接口方法的參數列表也暴露了核心業務數據信息可以供橫切業務捕獲相應的上下文。正是利用這一原理動態生成實例并在其方法和方法中切入了持久化相關的橫切業務邏輯。另外在組織多個實例之間的關系時為了提高性能還切入了對某些屬性延時加載的功能。數據庫連接維護橫切關注點分析數據庫連接維護是業務層中類的業務方法的橫切關注點業務層所有類都繼承基礎類。類定義為抽象類在該類中實現了最基本、最簡單一些業務操作如向數據庫中添加一個實例、刪除一個實例、通過語句得到列表等這些方法既可以被業務層外直接調用也可以在層類調用提高系統的靈活性。在的子類中實現一些具體業務業務層中的類的方法調用關系如下www.docin.com北京交通大學碩士學位論文第四章的應用與實現圖業務層類調用關系圖圖中利用代表各種不同業務類盡可能體現業務層的各種調用關系將這些調用關系分成三類業務層對本層外部的調用類依賴實例訪問數據實現商業業務方法業務方法中所有數據庫讀寫操作都需要借助于中的方法因此需要調用類中的方法業務層被層外部調用在本文架構中只限于控制層和工具類中的方法對它們調用為了提高業務層中方法的代碼重用性業務層內部必然也會存在相互調用的關系。所有的業務方法都需要通過數據庫連接訪問后臺數據庫都需要進行數據庫連接維護操作為了提高整個系統的性能應該把中的實例設置為延時加載避免不必要的實例的創建在需要使用它的時候才創建提高數據庫連接的利用率。因此創建實例應該是在類中對屬性讀取的時刻。www.docin.com北京交通大學碩士學位論文第四章的應用與實現當實例在包內互相調用時需要確保一次業務流程的執行只能使用同一個實例保證一次完整的業務處理中使用同一個數據庫連接因此還需要將創建的實例保存起來供當前線程公用在創建之前需要判斷當前線程是否已有實例從而決定是否需要創建。同時數據庫維護中還包含對事務的處理事務處理并不是每個業務方法都必須的只有當業務方法涉及“寫數據庫”操作時才涉及事務需要解決一個問題區別類的業務方法是否需要事務很多工具由程序開發人員通過定義文件對每個類業務方法作一些事務配置由程序讀取配置文件決定是否切入事務。定義文件無疑增加了開發人員的負擔。對于事務處理的判斷本文給出另外一種設計方案。分析類對數據庫的封裝業務層訪問數據都需要對通類的方法進行類中的方法是很有限的而且比較固定那些需要寫數據庫的方法也是比較明確如下列舉的方法通過實例再數據庫插入一條記錄。通過實例更新數據中一條對應的記錄。。通過實例刪除數據庫中對應的一條記錄。和通過語句前者不帶參數后者帶參數寫數據庫和通過語句前者不帶參數后者帶參數寫數據庫一旦捕獲到以上這些方法的調用開啟事務并標記之再次捕獲時根據該標記可以避免多次開啟事務。在整個業務方法執行完畢后根據標志決定是否需要作事務處理提交或者回滾同時關閉數據庫連接。另外在本章節討論了基于實現持久化方面的操作在實際應用系統都運用了框架已經做好了持久化這些寫數據庫操作自然也需要事務如何捕獲這些連接點中隱藏了這些持久化操作的實現無法直接捕獲但是可以捕獲對映射產生的實例的方法的調用一旦捕獲www.docin.com北京交通大學碩士學位論文第四章的應用與實現同樣開啟事務設置事務開始標志。通過上述的分析有三類連接點需要捕獲在類中捕獲對屬性的讀取切入創建實例邏輯在類中捕獲對需要寫數據庫操作的方法的調用和對映射產生實例的方法的調用切入開啟事務邏輯在包外捕獲對類方法的調用切入捕獲異常決定是否提交事務或者回滾事務以及關閉數據庫連接。對這三類連接點及其對應的橫切業務邏輯分別定義方面進行實現。創建實例方面編程創建實例的流程如下圖所示圖創建方面橫切業務流程首先需要定義該方面的切入點捕獲所有的連接點在類中捕獲所有對屬性的讀取切入的橫切業務邏輯如圖所示需要判斷當前線程是否已創建實例而決定是否創建實例。因此一旦創建實例就使用中的變量保存起來在該方面中同時提供靜態方法獲得該實例并將調用創建實例的邏輯也封裝在其中。定義方面示例代碼www.docin.com北京交通大學碩士學位論文第四章的應用與實現如下定義切入點定義前通知直接返回當前線程的實例’定義變量保存當前線程的實例腹淡取當前線程的實例硼從變量中獲取當前線程的實例如果當前線程沒有創建Ⅱ建實例變量中保存創建雕實例返回當前線程創建的實例
分析上述方面的實現代碼可以看到屬性一直都沒有進行賦值而且通知也沒有的調用屏蔽了對核心業務中對屬性的讀操作通知體中采用了進行代替直接返回當前線程創建的實例供核心業務訪問數據庫所有中的屬性的作用已經失去了原有面向對象語言中屬性的作用在這里它只充當了面方面定義切入點時一個供捕獲的特征。但是方面
的切入對于面向對象實現核心業務編程卻完全是透明的開發人員還是可以按照
原來的面向對象語言方式實現核心業務只是不再受橫切業務的干擾。這是面向方面編程一個對面向對象比較徹底的思想突破。開啟事務方面編程該方面編程需要捕獲的連接點對需要寫數據庫操作方法的調用和對映射產生實例方法的調用。前者本文已經分析就是中僅幾個有限的方法會進行寫數據庫操作捕獲這些連接點比較容易利用‘¨’操作組合分別對每個方法的原型特征匹配即可。www.docin.com北京交通大學碩士學位論文第四章的應用與實現對于捕獲調用實例方法的連接點由于數據層使用了框架判斷實例是否由數據庫中記錄映射產生有兩種辦法框架將所有映射產生的實例都緩存在了中并且提供了可供調用。可以捕獲所有的實例方法的調用然后判斷該實例是否在中從而決定是否需要事務。另外也利用庫增強了實例的和方法其實映射產生的實例都是類子類的實例這些子類都實現了一個接口。通過對捕獲這個接口的子類可以過濾掉其他的實例。本文選擇第種方式捕獲這些連接點。另外橫切業務一開啟事務在連接點處核心業務之前執行通知類型為前通知定義方面示例代碼如下定現入點定義切入點’’。’’捕獲類有寫數據庫操作方法的調用’?‘一捕獲映射產生的實例方法的調用定義前通知膳《取當前線程的實例通過實例開啟事務’第三章節已經討論了在類中實現有關事務處理的方法其中方法封裝開啟具體實現細節確保一個數據庫連接中同一時刻只能開啟一個事務。www.docin.com北京交通大學碩士學位論文第四章的應用與實現關閉數據庫連接、結束事務方面編程本文設計的方案中關閉數據庫連接、回滾事務、提交事務的橫切業務邏輯都在中定義如下靜態方法封裝對其的調用進行實現關閉數據庫連接朦取當前線程的實例朕閉數據庫連接提交事務代碼省略回滾事務代碼省略后面兩個方法省去了具體實現這些方法供方面的通知體調用切入核心業務中。該方面需要捕獲的連接點從包外對中的方法的調用由于所有的類都是在包下對業務方法捕獲將很容易如示例代碼。由于包含事務處理需要對業務方法進行異常捕獲從而決定是提交事務還是回滾事務因此定義周圍通知。定義方面示例代碼如下定義切入點’。匹配包下所有類公有方法的調用一’限定在包外的連接點定義周圍通知肌同用核心業務方法類的業務方法腱交事務回滾事務關閉數據庫連接’www.docin.com北京交通大學碩士學位論文第四章的應用與實現對與關閉數據庫連接的切入點考慮到控制層在一次用戶請求中可能需要調用多個業務層的業務方法在有些項目中會推遲一些可能在出控制層時才關閉數據庫連接避免實例頻繁地創建和銷毀。由于采用面向方面編程這個修改將變得非常容易直接修改該方面就可以實現而不用對核心業務代碼做任何修改充分體現了面向方面編程分離橫切關注點的優勢。緩存橫切關注點切入點分析在包內定義工具類實現讀取系統中相對靜態的信息由于這些信息讀取比較頻繁對這些信息進行緩存可以減少數據庫訪問次數提高系統性能。因此緩存是這個包內所有公有方法的一個重要橫切關注點。緩存的切入點所要捕獲的連接點就是包內所有公有方法的執行在該連接點處將方法執行結果緩存起來當下一次發生同樣的調用時可以直接返回緩存結果。在前面設計實現中都是使用捕獲對特定方法調用連接點這些方法主要集中在業務層和數據層如圖所示業務層和數據層的方法與頁面顯示層不存在直接的調用關系而頁面可以直接調用工具類方法如果仍然使用進行捕捉他們的調用將會失敗當前服務器如、都是對即時編譯它們直接使用標準的編譯器編譯頁面生成的字節碼的類文件。因此的編譯器對頁面中的連接點不再起作用需要使用另一關鍵字捕獲工具類方法體中的連接點。同時工具類的方法中會存在內部互相調用的情況需要解決嵌套緩存的問題以此提高緩存效率。中關鍵字可以實現對循環切入的控制見節具體實現。緩存主鍵上下文分析如何判斷是否同樣的一次調用從而可以利用上一次調用時緩存的結果關鍵是需要獲取連接點處的上下文以上下文為主鍵進行緩存被調用方法的執行結果就可以根據該緩存進行判斷是否有被緩存過的執行結果可直接被重用。工具類的公有方法都是定義靜態的因此該上下文主要有方法名含包名和類名、實參列表。在通知中提供的關鍵字中有兩個方法www.docin.com北京交通大學碩士學位論文第四章的應用與實現暑分別可以獲得這些上下文。以方法名和實參列表為主鍵在緩存中存儲這些公用靜態方法的執行結果緩存數據結構設計如下圖所示圖緩存數據結構圖緩存由一個實例充當它的鍵值分別是方法名和一個實例亥實例存放的鍵值對是實參的特征值與被調用方法的執行結果。實參的特征值通過遞歸組合每一個實參的哈希碼計算得到這種算法與重載類時的方法的算法類似。具體算法如下’www.docin.com北京交通大學碩士學位論文第四章的應用與實現否圖組合算法基于這種數據結構設計的緩存同時也需要提供一些取值和設值的操作定義類封裝緩存數據及其相應的操作緩存類中提供的方法主要有獲取緩存數據判斷是否已緩存和緩存調用結果。類圖如下www.docin.com北京交通大學碩士學位論文第四章的應用與實現越塒定義埋存∞醴印◆氓往哈根據方法名和安’列衰獲取援存中的教撼’№硪鰣刪膪喇叼啪四∥根據方法名和參斂列衰爿斷是否已作垤存嘲報撼方法名和參數列衰援存調用結摹脯窯埋存圖類緩存方面實現以上分析了方面實現的的切入點和上下文以及緩存數據結構設計實現緩存方面的代碼如下定義切入點’塒’’定義周匿通知利用關鍵字防止嵌套緩存。蕨取上下文方法名。場【】威取上下文實參列表∥從緩存中獲取數據腳果已經緩存直接返回緩存的結果月用核心方面工具類方法將運行結果存入緩存區回運行結果該方面在程序上實現了緩存邏輯與工具類中的一些具體業務邏輯編碼完全分離程序編譯之后將會向包內所有工具類的方法織入緩存邏輯。緩存的信息是相對靜態的也會有修改的時候因此需要考慮數據同步的問題由于這些信息通常都是由系統的管理員進行維護本文在設計緩存類的時候提供了方法可以供管理員從前臺發送請求調用清空所有的緩存保www.docin.com北京交通大學碩士學位論文第四章的應用與實現證數據同步。這種做法在實際項目實施中取得了較好的效果。緩存設計實現還有很多工作需要做清空所有緩存實現數據同步并不是很理想應該由程序自動判斷緩存中不同步的數據只清空這部分緩存即可另外還應該對緩存內容的使用情況進行監視設定合適時間內如果緩存內容沒有被再次使用就可以清除該部分緩存以節省存儲空間。本文在此不做進一步分析了。權限認證控制層的權限認證采用基于角色的訪問控制方法它是目前公認解決大型企業的統一資源訪問控制的有效方法。其顯著的兩大特征是減小授權管理的復雜性降低管理開銷。靈活地支持企業的安全策略并針對企業的變化有很大的伸縮性。數據庫結構設計權限認證主要有三張表用戶表、角色表、資源表。用戶表記錄系統中所有用戶基本信息主要字段為用戶、用戶名、密碼等。資源表記錄控制層所有控制方法信息每一條記錄對應類中的一個控制方法主要字段資源、資源名稱等角色表根據不同用戶類型定義各種角色主要字段角色角色名稱等。每一個用戶可以對應多個角色一個角色可以擁有多個資源權限用戶與資源不發生直接關系通過角色關聯自己可以訪問的資源用戶表與角色表、角色表與資源表都是多對多的關系關系圖如下www.docin.com北京交通大學碩士學位論文第四章的應用與實現圖基于角色權限設計表關系圖基于角色權限設計方案根據實際需要還可以加入群表該表的記錄可以與實際應用系統中用戶所在的部門組織相對應可以實現批量為用戶分配角色。權限控制邏輯詳細實現不是本文的重點本節旨在實現如何運用模式分離具體業務邏輯和權限控制邏輯。權限上下文分析客戶端請求提交給控制層在控制方法體中處理請求、調用具體業務邏輯之前都需要進行權限認證前文已經分析了權限認證邏輯實現通過模式分離出來單獨實現需要在切入控制方法體時獲取控制方法信息使其對應到資源表中的某一條記錄本文設計的方案就是通過的關鍵字獲取控制方法的全稱包名類名方法名控制方法都是不帶參數的而資源表的資源字段直接取值為方法的全稱。具體實現權限部分數據信息相對于具體的業務數據信息來說是相對較為靜態的在節設計的類增加方法調用層的業務方法∥判斷某個角色是否具備訪問該控制方法的權限在節中我們已經實現了為所有類中的方法切入了緩存業務邏www.docin.com北京交通大學碩士學位論文第四章的應用與實現輯這樣可以減少權限認證邏輯對數據庫的訪問。在用戶登陸系統之后中保存用戶所擁有的角色用戶從客戶端提交請求到中的方法切入權限認證邏輯實現代碼如下定義切入點捕獲所有地控制方法胴浹取上下文空制類中方法的全稱從中獲得用戶的角色信息調用。進行權限認證
一旦權限認證不通過核心業務就會被橫切方面攔截拋出異常轉向登陸的頁面。www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析第五章基于模式的系統特點分析在第三章本文給出了一種系統多層架構設計分析了各層需要切入的橫切關注點第四章針對這些橫切關注點已經設計實現了基于的解決方案。基于這種模式的系統與傳統的純模式的系統相比有了很大的改進采用純模式設計的系統各個橫切面業務邏輯與核心業務邏輯都糾結在一起相同代碼片段分散在程序中多處。以業務層流程順序為例如圖圖面向對象的業務層順序圖從圖中可以看出業務層類的方法除了實現核心業務邏輯以外還需要顯式地包含對輔助業務數據庫連接、事務處理等相關代碼的調用這種純的實現模式使得業務方法越多將會導致類似代碼片段越多的分散。而基于本文
面向方面的設計實現方案完全分離出了橫切方面單獨實現橫切業務邏輯利用橫切機制對所有的業務方法統一切入橫切方面業務邏輯自動組合實現完整的業務流程。橫切業務核心業務完全處在兩個不同的方向上實現了徹底的解耦避免代碼糾結。基于模式設計的本文方案業務層流程如圖所示www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析翌罌』庫連接、’翌罌庫連接心業務方法圖面向方面的業務層順序圖圖和圖的對比來看較從一個更高的思想層次構建系統模式實現更加自然、簡單更易于理解。的優勢總的來說基于模式的系統相比傳統的模式優越性主要體現在以下幾個方面耦合性將系統分為兩個方面核心關注點和橫切關注點從一個更高的層次對系統做了分解實現了核心業務與橫切業務的完全解耦將類中實現細節的共同部
分抽離出來封裝在方面中單獨進行實現具備更好的模塊化。以數據庫連接維
護方面實現為例在業務層與控制層完全不再關心數據連接的獲取和關閉在方面的通知中定義了數據連接獲取和關閉與核一業務執行的切入關系實現了任何時候在控制層中調有模型層業務方法都會自動切入數據庫連接維護相關操作但是在編碼實現上又是完全分離在方面中不僅封裝了橫切業務邏輯的www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析實現而且也封裝了核心業務邏輯對橫切業務邏輯的調用使兩者的耦合性大大降低。在本文的設計方案中雖然利用加入了各種實現橫切關注點的代碼但仍然保持核心業務多層架構特點橫切關注點方面的實現對于核心關注點方面完全透明整個系統實現了更高層次的解耦。可讀性分離出橫切方面的業務邏輯之后使程序開發人員可以專注核心業務編程不再受橫切業務方面的干擾不僅減輕了開發負擔還可以編寫更加簡潔的核心業務代碼具備更好可讀性。以事務處理為例傳統的實現都需要程序員對自己開發每一個業務模塊進行操作決定是否事務回滾或事務提交操作增加了程序開發人員的負擔同時大量的非核心業務代碼影響了人們對程序的閱
讀和理解。而一旦將這些放在方面中實現核心業務模塊化大大加強核心方面業務代碼將不再與非核心業務代碼糾結在一起實現起來更加容易清晰。可擴展性可擴展性是思想一個最大的特色它為系統提供了一個新的擴展機制可以非常容易地在不修改已有代碼的基礎上實現系統功能的擴展。方面可以在程序任何連接點處注入需要擴展的功能邏輯只需要增加有關方面代碼的實現即可這樣可以推遲很多傳統設計上的決定。在此以性能監控功能為例在一個系統部署運行初期通常都需要監控各個業務方法的執行性能情況傳統的實現方式可能
需要在各個業務方法前后手動插入一些代碼目的達到之后為了避免對性能的影響又需要手動刪除這樣的做法對于一個大型系統是難以忍受的。但是利用就非常容易實現該功能的插拔定義以下方面即可定義周圍通知””www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析在該方面的定義中重用了在關閉數據庫連接方面定義的切入點捕獲所有業務方的代用執行在其前后切入性能監控相關代碼。整個實現非常簡單。就像是在原有系統中只增加一個新類而已而且不用對原有代碼作任何修改。系統中很多需要擴展的功能都可以通過這種方式實現。良好的可擴展性同時也具備良好的可維護性面向方面編程將所有的橫切關注點集中實現和調用更加方便對橫切業務的維護。基于模式系統設計開發的不足作為一種新的編程思想模式在進行系統設計開發的時候也存在一些不足的地方本文設計方案采用語言在環境下進行實驗不足之處主要體現在以下幾個方面的開源社區已經提供的插件在可視化設計和代碼輔助上做了很大的支持但是仍然存在不足特別是可視化在準確性和可用性上有些欠缺。另外缺乏對橫切業務實現代碼跟蹤調試的支持。當前各種主流的服務器缺乏對支持。利用語言在開發環境下編譯后的字節代碼在現有的服務器運行可以不需要專有編譯器支持但在系統中所有頁面都是利用標準的編譯器即時編譯要想捕獲頁面上的連接點就無法實現因此存在一定的局限性。基于面向對象語言擴展的實現原理編譯器在源程序編譯生成字節碼之前會對源程序作一些橫切織入修改因此對方面織入的做任何修改相關涉及的類都需要重新編譯對系統部署造成一些麻煩。對編碼風格和編碼習慣的限制在編程中很重要的一點是如何定義切入點精確捕獲所有連接點為了使定義切入點更加容易要求面向對象編程具備統一編程風格甚至需要強制些良好編程習慣如本文設計方案中對各層代碼所在的包路徑都做了嚴格的限制這樣才容易根據包路徑的特征在不同的層中切入不同的橫切業務。定義切入點的時候大多數都需要根據對方法名的特征匹配從而捕獲連接點因此對系統的代碼包的組織結構和調用關系都提出了強制性的要求例如在頁面www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析中就不能直接調用業務層的類的方法否則由于頁面中沒有切入一些必要的橫切業務數據庫連接不會主動關閉事務結束也得不到處理從而導致出錯強制要求類的業務方法只能在控制層等地方被調用程序才能正確執行。另外并不支持對利用反射機制進行方法調用的捕獲因此試圖利用反射機制調用類的業務方法也會導致同樣的錯誤。相對于面向對象編程面向方面編程的確帶來了更多的代碼編寫限制但是這種限制也有利于幫助我們開發出程序結構、代碼風格更加良好的系統正如的作者所言方面可以用于維護一個類的幾個方法之間的內在一致性它非常適合強制一種按契約進行設計的編程風格可以用于強制各種常見的編碼習慣。作為一種基于語言的擴展語言雖然存在著一些固有的缺點但是總的來說目前它還是功能最強大、使用最方便的具。面向方面編程最佳實踐語言作為當前語言事實上的規范使用靈活功能強大更方便體現面向方面編程思想使面向方面編程更加自然。結合本文的實驗體會提出以下最佳實踐條款盡可能為一些具有相同性質的類定義簡單的父類父類最好定義為抽象類或者接口這樣可以非常方便根據父類對這些類中的連接點捕獲。如本文設計方案中對所有的業務對象類定義了父類。讓業務層與控制層、數據層徹底分離保持單向的調用關系防止各層之間出現循環調用關系。例如一分開。各層都對其他層隱藏本層的具體實現。禁止在和中實現業務邏輯。可以使用模式來降低代碼的耦合度在橫切關注點與核心關注點之間傳遞上下文因為絕大多數用戶的一次請求都是在同一個線程中完成盡可能在程序開發中嚴格遵循這一點否則需要作特殊處理造成一些麻煩。不要試圖用關鍵字捕獲頁面中對方法進行調用的連接點當前的服務器尚不支持只會導致失敗。變通的方法可以采用關鍵字切入被調用方法體內部捕獲方法的執行。頁面中減少對后臺業務方法的直接調用盡可能的從對象中獲www.docin.com北京交通大學碩士學位論文第五章基于模式的系統特點分析取數據。在本文設計方案中強制禁止頁面直接調用類的方法但可以調用業務層中工具類方法。各種標志符的命名遵循一些約定俗成的習慣包括方法名、包名、類名、屬性名等命名。這樣方便于利用專有的通配符根據這些命名特征進行匹配從而更加容易捕獲連接點。例如所有的實例的方法都以“”為前綴這樣就可以很容易定義切入點切入對象持久化方面的橫切業務。www.docin.com北京交通大學碩士學位論文結論結論總結本文對設計與開發做了積極地探索和研究。介紹了的主要概念橫切面、切入點、方面等探討了有關技術實現原理和設計開發理論結合系統的特點設計了一種基于的系統的架構重點研究了在系統中的應用針對系統具有共性的橫切關注點對象持久化、數據庫連接維護、緩存和權限認證設計實現了基于的解決方案。從中我們可以看出相比傳統面向對象編程模式的優越性主要體現在以下三方面減少核心關注點業務開發人員的負擔使他們可以專注商業業務邏輯的開發提高開發效率。同時有助于團隊成員之間分工協作由于核心關注點和橫切關注點的徹底分離團隊成員可以分別專注于這兩方面開發互相影響大大減小有效發揮團隊力量。有效解決了模式下面臨“橫切”問題時的代碼混亂使系統進一步解耦增強了系統的可讀性、可維護性和可擴展性利用可以在不修改系統核心方面代碼的基礎上只需增加“橫切面”就可以很容易實現系統功能的擴展。不僅很好的解決系統中已有橫切關注點與核心關注點的分離也為以后系統增加新的橫切關注點擴展新的功能提供了更大空間同時對已實現橫切功能維護變得非常獨立。從單一的層次方向構建系統而增加了橫切面方向從一個更高的層次構建系統更自然地將系統需求分析映射到編程模式更加方便人們對系統的設計、開發和理解。進一步工作作為一種新的編程模式仍然處在不斷發展和完善之中當前設計、開發、測試理論仍然相當缺乏在業界缺乏統一的規范甚至還存在對它的種種爭論在實際應用中尚未出現真正的語言。在一個新的編程思想沒有成熟之
前將更加吸引著人們對這些問題的探討和研究。在理論和實踐應用方面都www.docin.com北京交通大學碩士學位論文結論有待進一步的探討研究實踐應用中加強在具體商業業務領域的運用目前大多數的應用仍然局限于解決一些系統級橫切關注點問題需要擴大的應用領域在應用中不斷總結經驗發現的規律充實相關開發理論。目前不管是基于動態代理機制實現的框架還是基于面向對象語言的擴展都不同程度上存在著一些不足期待著更好的語言。同時思想的實際運用也需要更好的集成開發工具支持加強代碼輔助、可視化、跟蹤調試等功能。分析設計相關理論需要不斷發展基于的需求分析和系統設計的理論方法都非常欠缺對相關概念和思想很多在業界仍未形成共識。最后引用的話結束本文“方面仍然呆在這里。它們仍然沒有成為主流應用程序一部分的一個方法但它們每一天都變得更加接近”。www.docin.com北京交通大學碩士學位論文參考文獻參考文獻【】陶剛編譯‘體驗中面向方面編程》時卻年月【】著∞【】年月【】陳景燕陽國貴著下的權限控制實現》時】年月【】著技術簡介》】年月【著馮博琴等譯‘面向對象分析與設計》【】北京機械工業出版社年月【】張海潘編著‘軟件工程導論》【】北京清華大學出版社年月【】∞【】年月【】下的編寫的應用》【【‘用動態代理實現【】【著精通構建與部署應用的最佳策略》瞰】北京電子工業出版社【著潘愛民譯口哪北京機械工業出版社年月【】古全友王恩波胥昌勝技術在系統構建中的應用》【】計算機技術與發展第卷第期年月【】著個最重要的最佳實踐》【】年月【孫衛琴編著《精通對象持久化技術詳解》川電子工業出版社年月【格雷德斯基著‘精通【】清華大學出版社年月【著龔波馮軍程群梅等譯設計模式手冊》【】機械工業出版社年月【李清華著‘基于的系統實現研究》武漢大學碩士學位論文年月【】范武蘇一‘基于編織技術的緩存框架研究和實現》【】軟件導刊年期【∞著‘www.docin.com——一韭至至望查差堡圭竺垡笙蘭堡查蘭堅》【】電子工業出版社年月】塒刪著》】
【?【】“【咖【】【美詹森美赫魯著譯∞刪㈣》中文版【電子工業出版社年月【著》【年月【著阱】年月【著》【】北京機械工業出版社年月著【北京機械工業出版社【】》】年月www.docin.com北京交通大學碩士學位論文作者簡歷作者簡歷教育經歷年月一至今就讀于北京交通大學軟件學院計算機軟件與理論專業軟件工程方向攻讀碩士學位年月一年月就讀于華中師范教育技術學專業計算機輔助教育方向獲理學學士學位工作實習經歷年月一年月實習于北京合力金橋軟件技術有限責任公司職位工程師年月一年月兼職于長城企業戰略咨詢研究所職位工程師年月年月任教于九江學院主講課程語言程序設計。主要工程項目年月一年月參與中國網通客戶關系管理》主要技術框架主要職責網管數據交換接口、用戶數據同步接口和統一審批固化模塊的設計與開發。年月一年月參與‘中學生心理健康測試系統》主要的技術框架包括的、、等功能、本人承擔的主要工作一些特殊問卷測試、數據統計分析、系統配置模塊、自定義問卷發布等模塊的數據庫設計與開發以及一些通用代碼的編寫。本人的工作量占整個項目三分之一以上年月年月個人承接《國家軟件專業孵化器技術支持中心北交大分中心》的設計與開發。本人主要工作數據庫設計、系統架構除論壇和美工以外幾乎所有功能模塊設計開發實現各個中心之間的注冊用戶的單點等錄部分編碼。論文發表情況‘面向方面編程在多層架構中業務層的應用》發表于《計算機技術與發展》年第期《基于多層架構中層對數據庫訪問的優化》發表于《鐵路計算機應用》年第期www.docin.com北京交通大學碩士學位論文獨創性聲明獨創性聲明本人聲明所呈交的學位論文是本人在導師指導下進行的研究工作和取得的研究成果除了文中特別加以標注和致謝之處外論文中不包含其他人已經發表或撰寫過的研究成果也不包含為獲得北京交通大學或其他教育機構的學位或證書而使用過的材料。與我一同工作的同志對本研究所做的任何貢獻均已在論文中作了明確的說明并表示了謝意。學位論文作者簽名弋包簪罕簽字日期。一口年月仁日www.docin.com學位論文版權使用授權書本學位論文作者完全了解北京交通大學有關保留、使用學位論文的規定。特授權北京交通大學可以將學位論文的全部或部分內容編入有關數據庫進行檢索并
采用影印、縮印或掃描等復制手段保存、匯編以供查閱和借閱。同意學校向國家有關部門或機構送交論文的復印件和磁盤。保密的學位論文在解密后適用本授權說明學位論文作者簽名眵暉簽字日期年月日新簽名嬲簽字日期仞彩年日www.docin.com
轉載于:https://www.cnblogs.com/wangzhongming/p/7052745.html
總結
以上是生活随笔為你收集整理的YJ智能框架--面向对象方面编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用打开方式是计算机程序,电脑文件打开方
- 下一篇: 南梦宫 拼图笔记 1.流畅的拖拽操