999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于面向方面編程技術(AOP)在信息系統中的研究與實踐

2016-03-12 18:45:30廖躍鈞
科技資訊 2015年24期

廖躍鈞

摘 要:目前傳統的程序設計——面向對象編程(Object-Oriented Programming,OOP)已經成為業界的主流,是大多數軟件項目開發的首選技術。當用OOP對公共行為進行建模時,它展示出強大的功能,但它在解決橫跨多個模塊的行為時,如在處理一些關注點分散問題存在著一定的局限性,甚至會使整個項目開發出現混亂不清的局面。在這里將共同探討面向方面編程技術(AOP)的思想,基本概念和原理,并通過具體的例子簡單介紹了面向方面編程技術(AOP)在信息系統中的研究與實踐。

關鍵詞:面向方面編程 信息系統 程序設計

中圖分類號:TP31 文獻標識碼:A 文章編號:1672-3791(2015)08(c)-0006-04

Research and Practice of Information System Based on Aspect-oriented Programming (AOP) Technology

Liao Yuejun

(Guangdong Medical College,Dongguan,Guangdong Province, 523808 China)

Abstract:The traditional Programming,Object Oriented Programming(Object-oriented Programming,OOP) has become the mainstream of the industry,is the first choice for most software project development technology.When using OOP to public behavior modeling,it shows powerful features,but it in solving behavior across multiple modules,such as in dealing with some scattered focus there is certain limitation,even can cause a confusion of the whole project development situation.Here we discuss the thought of aspect-oriented programming(AOP)technology,the basic concept and principle,and through the concrete example simple aspect-oriented programming(AOP)technology is introduced in the research and practice of information system.

Key Words:Aspect-Oriented Programming;Information system;Program design

從上世紀九十年代至今,Object-Oriented Programming(OOP)都是主流的程序編程設計方式。面向對象技術思想的出現改變了大家程序設計的思路,大大地提高了軟件生產效率。并且面向對象技術符合大家對事物認識的思維習慣,它早已被證明是一種行之有效的軟件開發方法。面向對象編程技術思想是將世界上的萬事萬物都視為對象,在編程世界里將所有的數據和對數據的操作聯系在一起,把他們當作捆綁在一起的整體——對象。然后再把那些有共同屬性和行為的對象,進行歸類,對于同一類的對象經過抽象后,稱之為類,因此類就是描述相同類型的對象集合,定義好類后,我們又通過類來產生有著共同數據屬性和相同行為的新對象,故對象是無窮無盡的,一切事物皆對象。面向對象編程就是定義各組相同類型對象的集合——類,再由類來生成對象,對象和對象之間再進行通信。這就是面向對象編程的技術思想,盡管利用面向對象編程的技術思想,可以建立對象模型與現實世界的系統模型的匹配,但是在實際的軟件項目中,卻仍然存在一些對象方法很難解決的問題。如在解決橫跨多個模塊的行為時,如在處理一些關注點分散問題存在著一定的局限性甚至會使整個項目開發出現混亂不清的局面。AOP已被證實是一種有效地簡化軟件系統復雜度的方法。它的主要思想來源于軟件設計中關注點的分離。

1 AOP的基本原理

1.1 概念

由于AOP的應用程序結構與傳統高級語言的應用程序結構基本類似,傳統的高級語言系統實現由以下三部分組成:編程語言;編譯器;項目開發的應用程序,故AOP的系統實現也有以上三個相應部分:語言;聯結器,核心級模塊。所謂的面向切面編程(AOP)其實是對業務邏輯又進行了進一步的抽取,將多種業務邏輯中的公用部分抽取出來做成一種服務(比如日志記錄,性能統計,安全驗證等),從而實現程序代碼的重用。另外這種服務通過配置,可以動態的給程序添加統一控制,利用AOP可以對業務邏輯的各個部分進行分離,從而使得業務邏輯各部分之間的耦合度降低。那么要進一步了解AOP的的基本原理,首先要弄清楚這幾個概念具體指的是什么。

(1)Aspect(方面):對橫切關注點的模塊化,通知和切入點的組合被稱之為方面,故方面是用來定義一段程序中所包括的邏輯,以及安排何時執行這個邏輯。

(2)Advice(通知):在某一個特定的聯結點處運行的代碼稱為“通知”,是要切入的邏輯,對橫切關注點的具體實現,有分類的概念。通知有很多種,比如在Before Advice 在方法前切入;After Advice 在方法后切入;拋出異常時也會切入:After Returning Advice 在方法返回后切入,拋出異常則不會切入;After Throwing Advice 在方法拋出異常時切入。Around Advice 在方法執行前后切入,可以中斷或忽略原有流程的執行

(3)Pointcut(切入點) :一個切入點是用來定義某一個通知該何時執行的一組聯結點,定義了Advice(通知)應用到哪些JoinPoint(聯結點)上,對Spring來說就是函數調用。Joinpoint的表達式,表示攔截哪些方法。一個Pointcut對應多個Joinpoint。

(4)JointPoint(連接點):一個程序執行過程中的連接點,如某個業務方法,。典型的攔截點就是調用一個函數;它用來定義在程序的哪里通過AOP加入新的邏輯。

(5)Target Object Advice(被應用的目標對象):如果一個對象的執行過程受到某一個AOP的應用,那么它就叫一個被應用的目標對象。目標對象通常也稱為被通知對象。

(6)Weaving(織入):織入是將方面真正加入程序代碼的過程。

(7)Introduction(引入):可以動態的為類添加新的方法或屬性。

他們之間的關系如圖1所示。

1.2 AOP程序的設計步驟

AOP應用程序包括以下三個明顯的開發步驟:

(1)將系統需求進行功能性分解,區分出核心關注點以及橫切關注點;

(2)單獨完成每一個關注點的編碼和實現,構造核心級模塊以及Aspect系統級模塊;

(3)用聯結器指定的重組規則,將核心級模塊和aspect系統級模塊進行組合,形成最終系統。

2 AOP在信息系統中的實踐

為了建立松散耦合的、可擴展的信息系統,AOP應用到的橫切技術,通常分為兩種類型:動態橫切和靜態橫切。動態橫切就是通過切入點和連接點在一個方面中創建行為的過程,連接點可以在執行時橫向地應用于現有對象。動態橫切通常用于幫助向對象層次中的各種方法添加日志記錄或身份認證。在很多應用場景中,動態橫切技術基本上代表了AOP。動態橫切技術的核心主要包括jointpoint(連接點),pointcut(切入點),advice(通知)和aspect(方面)。在前面,已經概要地介紹了這些術語分別代表的含義。接下來,將以一個具體的實例來進一步闡述它們在AOP動態橫切在實際信息系統中的作用。以一個學生考試系統為例子,考慮到學生考試系統的功能,就是需要對試題進行添加、刪除、修改等管理操作。也就是說,在實際的應用場景中,這些行為因為涉及到數據庫的增、刪、改操作,所以必須添加事務才能使操作成功。首先采用傳統的OOP程序設計方法,其偽代碼如下:

public class QuestionManager {

privateQuestionDaoquestionDao;

public void addQuestion(QuestionDtoquestionDto) {

Transaction t = new Transaction();

questionDao.insert(questionDto);

t.commit();

}

public void deleteQuestion(QuestionDtoquestionDto) {

Transaction t = new Transaction();

questionDao.delete(questionDto);

t.commit();

}

public void updateQuestion(QuestionDtoquestionDto){

Transaction t = new Transaction();

questionDao.update(questionDto);

t.commit();

}

}

同樣的,在該考試系統中,還需要對試卷進行管理,它采用了同樣的事務機制:

public class PaperManager {

privatePaperDaopaperDao;

public void addPaper(PaperDtopaperDto) {

Transaction t = new Transaction();

paperDao.insert(paperDto);

t.commit();

}

public void deletePaper(PaperDtopaperDto) {

Transaction t = new Transaction();

paperDao.delete(paperDto);

t.commit();

}

public void updatePaper(PaperDtopaperDto){

Transaction t = new Transaction();

paperDao.update(paperDto);

t.commit();

}

}

如此以來,在整個學生考試系統中,核心業務包括試題管理和試卷管理,它們都需要相同的事務管理,如圖2所示:

也就是說,利用AOP技術,可以分離出系統的核心關注點和橫切關注點,從橫向的角度,截取業務管理行為的內部消息,以達到織入事務管理邏輯的目的。當執行addQuestion()等方法時,系統將添加事務完成添加試題功能,調用橫切關注點邏輯,因此該方法即為AOP的join point。對于學生考試系統而言,每個需要事務的方法都是一個單獨的join point。由于事務管理將在每個方法執行前執行,所以對于這一系列join point,只需要定義一個point cut。當系統執行到join point處時,將根據定義去查找對應的point cut,然后執行這個橫切關注點需要實現的邏輯,即advice。而point cut和advice,就組合成了一個事務管理的aspect方面。

由于aspect是一個封裝的對象,可以定義這樣一個aspect:

private static aspect TransactionAspect{……}然后在這個aspect中定義point cut,在point cut中,定義了需要截取上下文消息的方法,例如:

privatepointcutTransactionExecution();

execution(public void QuestionManager.addQuestion(QuestionDto)) ||

execution(public void QuestionManager.deleteQuestion(QuestionDto)) ||

execution(public void QuestionManager.updateQuestion(QuestionDto)) ||

execution(public void PaperManager.addPaper(PaperDto)) ||

execution(public void PaperManager.deletePaper(PaperDto))||

execution(public void PaperManager.updatePaper(PaperDto));

由于事務管理是在試題管理方法執行之前完成,因此在before advice中,定義事務管理:

before(): transactionExecution()

{

Transaction t = new Transaction();

questionDao.insert(questionDto);

t.commit();

}

通過定義了這樣一個完整的aspect,當系統調用QuestionManager或PaperManager的相關方法時,就觸發了point cut,然后調用相應的advice邏輯。如此以來,QuestionManager和PaperManager模塊就與事務管理模塊完全解除了依賴關系,同時也消除了傳統設計中不可避免的事務處理的重復代碼。這對于建立一個松散耦合、可擴展的系統軟件是非常有利的,同時提高了軟件開發速度。

4 AOP存在的問題

大家知道AOP的橫切關注點是跨越多個模塊的,但目前在技術上通常只能采用一維方法學來實現,這使得從需求到實現只能沿著單一的維來映射。這個單一的維通常是核心模塊級實現,其它需求則與其相互交織在一起。即需求空間是多維空間,而實現空間卻是一維空間,這樣的不匹配造成了從需求到實現的不統一。

采用目前的方法學來實現橫切關注點已證實存在許多問題,主要有:

*代碼交織(code tangling):一個軟件系統的模塊可能同時與數個需求交互;

*代碼分散(code scattering):由于橫切關注點跨越多個模塊,所以與這些橫切關注點相關的實現代碼也跨越多個模塊;

*代碼重用性差:由于一個模塊中包含對多個關注點的實現,使得對類似功能有需求的其它系統不能很方便地重用該模塊;

難以維護和升級:由于系統橫切關注點的模塊性差,如果系統需要改動一個功能,則需要修改多個相應的模塊才能實現,這樣極易造成系統的不一致,而且還需進行大量的測試工作以確保不會引起新的Bug。

5 結語

AOP技術自從1997年正式提出以來,經過多年的發展,已取得很大的成效。目前支持面向方面編程的語言已有許多種,如AspectJ、AspectC、AspectC++、JBoss、Spring等。其中以AspectJ語言最為成熟,很多實際的工程項目已用該語言解決了大量像日志、安全、事務、策略等橫切關注點問題。AOP語言的使用解除了OOP語言代碼混亂、交織的局面,最大程度上實現了代碼的重用,方便了軟件項目的升級與維護。

參考文獻

[1] 薛冰.改進AOP技術在軟件開發中的應用與研究[D].大連:大連交通大學,2013.

[2] 王書懷,邢建春,李決龍,等.AOP技術在信息管理系統中的應用研究[J].計算機應用與軟件,2012,29(6):189-195.

[3] 劉余和.面向Aspect技術在海關EAI中的實踐與研究[D].廣州:中山大學,2006.

[4] G Kiczales, J Lamping, A Mendhekar, et al. Aspect-Oriented Programming [C].In European Conference on Object-oriented Program,1997,44(2):217-235.

主站蜘蛛池模板: 亚洲成aⅴ人片在线影院八| 欧美a在线| 毛片大全免费观看| 日韩精品高清自在线| 亚洲一级毛片| 亚洲免费人成影院| 日本一区高清| 国产成人精品免费av| 精品久久久久成人码免费动漫| 欧美视频在线不卡| 毛片在线看网站| 欧美在线黄| 综合五月天网| 91在线一9|永久视频在线| 国产精品露脸视频| 国产乱子伦无码精品小说| 伊人无码视屏| 久久公开视频| 国内毛片视频| 成人福利在线免费观看| 97人人做人人爽香蕉精品| 亚洲精品图区| 久久久久国产一区二区| 全部免费特黄特色大片视频| 日韩成人午夜| 欧美日韩国产成人高清视频| 国产爽歪歪免费视频在线观看| 国产噜噜在线视频观看| 91无码国产视频| 亚洲综合色婷婷| 国产一级妓女av网站| 中文字幕亚洲电影| 丁香亚洲综合五月天婷婷| 中文字幕无码制服中字| 99re热精品视频国产免费| 不卡国产视频第一页| 精品国产自在在线在线观看| 国模私拍一区二区| 曰韩人妻一区二区三区| 97人人模人人爽人人喊小说| 国产对白刺激真实精品91| 四虎成人免费毛片| 亚洲区第一页| 亚洲无码A视频在线| a毛片在线播放| 国产精品自在自线免费观看| 日韩亚洲综合在线| 亚洲h视频在线| 性激烈欧美三级在线播放| a在线亚洲男人的天堂试看| 欧美亚洲国产精品第一页| 亚洲性影院| 国产精品无码AV中文| 国产高清在线精品一区二区三区| 五月婷婷激情四射| 99热这里只有精品久久免费| 婷婷综合缴情亚洲五月伊| 精品午夜国产福利观看| 69国产精品视频免费| 天天躁狠狠躁| 2021国产精品自拍| 日韩无码精品人妻| 亚洲av无码专区久久蜜芽| 国产视频a| 色天天综合| 国产主播一区二区三区| 欧美一级专区免费大片| 免费看的一级毛片| 成人国产小视频| 欧美激情福利| 中美日韩在线网免费毛片视频| 欧美午夜久久| a级毛片网| 亚洲欧美国产高清va在线播放| 伊人蕉久影院| 无码福利视频| 日本欧美中文字幕精品亚洲| 欧美成人日韩| 亚洲h视频在线| 精品天海翼一区二区| 日韩高清中文字幕| 成人年鲁鲁在线观看视频|