亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        廖躍鈞

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

        關鍵詞:面向方面編程 信息系統(tǒng) 程序設計

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

        1 AOP的基本原理

        1.1 概念

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

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

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

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

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

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

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

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

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

        1.2 AOP程序的設計步驟

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

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

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

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

        2 AOP在信息系統(tǒng)中的實踐

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

        }

        }

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

        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();

        }

        }

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

        也就是說,利用AOP技術,可以分離出系統(tǒng)的核心關注點和橫切關注點,從橫向的角度,截取業(yè)務管理行為的內(nèi)部消息,以達到織入事務管理邏輯的目的。當執(zhí)行addQuestion()等方法時,系統(tǒng)將添加事務完成添加試題功能,調(diào)用橫切關注點邏輯,因此該方法即為AOP的join point。對于學生考試系統(tǒng)而言,每個需要事務的方法都是一個單獨的join point。由于事務管理將在每個方法執(zhí)行前執(zhí)行,所以對于這一系列join point,只需要定義一個point cut。當系統(tǒng)執(zhí)行到join point處時,將根據(jù)定義去查找對應的point cut,然后執(zhí)行這個橫切關注點需要實現(xiàn)的邏輯,即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));

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

        before(): transactionExecution()

        {

        Transaction t = new Transaction();

        questionDao.insert(questionDto);

        t.commit();

        }

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

        4 AOP存在的問題

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

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

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

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

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

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

        5 結語

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

        參考文獻

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

        [2] 王書懷,邢建春,李決龍,等.AOP技術在信息管理系統(tǒng)中的應用研究[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三级三点在线观看| 亚洲午夜久久久精品国产| 久久综合九色综合久久久 | 国产剧情亚洲一区二区三区| 精品久久av一区二区| 无码免费一区二区三区| 欧美黄色免费看| 黑丝国产精品一区二区| 久久精品亚洲熟女av蜜謦| 插b内射18免费视频| 日韩免费小视频| 亚洲av一二三四又爽又色又色 | 久久久久国产精品| 人人妻人人爽人人做夜欢视频九色 | 国产白浆流出一区二区| 女色av少妇一区二区三区 | 久草热8精品视频在线观看| 久久国产香蕉一区精品天美| 久久日本视频在线观看| 国模吧无码一区二区三区| 精品久久久久久久久久久aⅴ| 91久久精品一二三区蜜桃| 亚洲av人片在线观看| 亚洲日韩一区二区一无码| 国产精品免费久久久免费| 日韩字幕无线乱码免费| 无码a级毛片免费视频内谢5j| 国产在线精品欧美日韩电影| 国产九九在线观看播放| 亚洲福利二区三区四区| 亚洲熟妇少妇任你躁在线观看无码| 国产精品毛片无遮挡高清 | 少妇高潮精品在线观看| 国产成+人+综合+亚洲欧美丁香花| 欧美精品中文| 亚洲精品国产二区在线观看 | gv天堂gv无码男同在线观看| 综合无码一区二区三区四区五区| 精品久久免费国产乱色也| 亚洲精品国偷拍自产在线| 永久免费无码av在线网站|