YJ智能框架--面向對象方面編程

                中文摘要

摘要:面向對象編程做爲主流編程範型,在Web系統設計實現中獲得了很好的應用,但同時也早已暴露出不足,針對面向對象編程思想的不足人們提出了面向方
面編程。面向方面編程很好地解決了橫切關注點的問題,從一個更高的角度對系統進行了分解。本博客較深刻地分析研究了面向方面編程與面向對象編程之間的關係,探討了面向方面編程的技術實現原理,對基於面向方面需求分析、設計、開發相關理論作了進一步的探討和研究,着重研究了面向方面編程在Web系統中的應用。java

  針對Web應用系統特色,本文分析設計了一種基於MVC的多層系統架構,並着重分析了系統中具備共性的一些系統級橫切關注點,對象持久化、數據庫鏈接維護、緩存和權限認證,及它們與Web系統各層之間的關係。YJ智能框架針對這些橫切關注點設計出了具體的解決方案。本文最後對比分析了面向方面編程與面向對象編程,總結了面向方面編程的優缺點結合實踐應用提出了一些基於面向方面編程的最佳實踐程序員

第一章 緒論

1.1選題背景及其意義

  基於B/S多層架構的Web系統,因爲更高的安全性、可維護性等特色已經取代C/S架構成爲企業應用的主流,隨着社會的發展,各行各業信息化程度愈來愈高,企業應用需求不斷髮展變化,軟件應用系統須要實現的業務操做愈來愈複雜龐大,同時也對軟件各方面性能,可擴展性、可維護性、安全、穩定等提出了愈來愈高的要求。應用需求的發展不停地挑戰着計算機軟件技術的發展,軟件編程方式經歷了從最初的面向機器、到面向過程、再到面向對象,每一種新的編程方法學的發展,都爲人們提供了一種更爲自的方式,能夠將系統需求映射爲計算機語言的編程結構。這些編程方法學的不斷髮展可讓人們建立更加複雜的軟件系統。面向對象編程(Object-Oriented Programming簡稱OOP)相比傳統編程模式在構建Web系統時顯出了它的強大功能,成爲了當前主流的編程範型。OOP經過分析、抽象出一系列具備必定屬性與行爲的實例,並經過這些實例之間的協做完成系統的功能,按照功能或行爲對軟件系統進行分割,架構整個系統,很好地解決了數據與操做模塊化編程,相比之前面向過程編程大大解耦了軟件系統。OOP發展到如今出現了不少優秀的面嚮對象語言,如java它是一種純面嚮對象語言,並且java在針對企業應用web系統中提供了一整套基於面向對象的解決方案和技術規範包括有、、、、、等等愈來愈多的系統採用基於技術的實現也成爲人們主要的選擇。然而隨着軟件系統的用戶需求的不斷髮展日益顯出了自身的不足。技術中最重要的概念是類和對象。類對數據及其相關操做進行了封裝封裝帶來了隱藏實現細節的好處但同時也限制了設計開發的靈活性和系統的擴展性。只能從業務流程的單一方向設計和實現系統而實際應用系統中業務繁多不少業務都須要執行共同的操做。日誌就是一個典型的例子基於傳統實現的系統會出現日誌相似操做的相關調用代碼分散在程序中多處引發代碼混亂對系統維護和理解形成較大困難同時也增長了開發人員額外的負擔。這種www.docin.com北京交通大學碩士學位論文第一章緒論編程模式還使得在多個類的方法中擴展相似操做變得很是困難喪失良好的擴展性。針對編程模式的不足人們提出了面向方面編程簡稱它把實現相似日誌這樣的操做看做一個橫切面利用能夠很好地解決這種橫切問題被不少人看好認爲是繼以後計算機編程學上又一場重大的革命力求站在一個更高的角度分解應用系統更接近真實世界架構系統解決所處的困境。研究及其應用現狀概念最早是由領導的施樂公司帕洛阿爾託研究中心即屺一個研究小組於年提出並隨後又申請了的專利。可是思想產生已經有至關長的時間了早在年開始觚屺的研究人員就對面向對象思想的侷限性進行了分析造成了概念的雛形甚至還有其餘人聲明更早的時候就作過與相似思想和方法論的研究如於年發表的論文中提到不修改已有代碼如何擴展已有系統功能。隨着研究的深刻被愈來愈多的人關注一個項目組近年來也一直花大力量研究還有不少關於的開源項目獲得了的支持如目前最成熟技術—一語言也獲得了相關項且組的支持公司也推出了他們的框架。目前和合併成了。也引發了微軟公司至關大的關注他們也正在加大力量對進行研究甚至在體系中已經不一樣程度應用了相似的思想。正在逐漸造成一套完整的程序設計思想各類平臺的技術也應運而生。平臺是應用最先的也是目前運用最爲成熟的出現了不少支持的框架如、、和基於的擴展語言這裏列舉的四種工具都是基於的實現它們被公認爲是走在的最前列。然而做爲一種新的編程思想和模式仍有待進一步探討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
正則表達式

相關文章
相關標籤/搜索