1 引言
軟件設(shè)計(jì)因?yàn)橐朊嫦驅(qū)ο笏枷攵饾u變得豐富起來(lái)。“一切皆為對(duì)象”的精義,使得程序世界所要處理的邏輯簡(jiǎn)化,開(kāi)發(fā)者可以用一組對(duì)象以及這些對(duì)象之間的關(guān)系將軟件系統(tǒng)形象地表示出來(lái)。而從對(duì)象的定義,進(jìn)而到模塊,到組件的定義,利用面向?qū)ο笏枷氲姆庋b、繼承、多態(tài)的思想,使得軟件系統(tǒng)開(kāi)發(fā)可以向搭建房屋那樣,循序漸進(jìn),從磚石到樓層,進(jìn)而到整幢大廈的建成。應(yīng)用面向?qū)ο笏枷耄谠O(shè)計(jì)規(guī)模更大、邏輯更復(fù)雜的系統(tǒng)時(shí),開(kāi)發(fā)周期反而能變的更短。自然其中,需要應(yīng)用到軟件工程的開(kāi)發(fā)定義、流程的過(guò)程控制,乃至于質(zhì)量的缺陷管理。但從技術(shù)的細(xì)節(jié)來(lái)看,面向?qū)ο笤O(shè)計(jì)技術(shù)居功至偉。然而,面向?qū)ο笤O(shè)計(jì)的唯一問(wèn)題是,它本質(zhì)是靜態(tài)的,封閉的,任何需求的細(xì)微變化都可能對(duì)開(kāi)發(fā)進(jìn)度造成重大影響。
可能解決該問(wèn)題的方法是設(shè)計(jì)模式。GOF將面向?qū)ο筌浖脑O(shè)計(jì)經(jīng)驗(yàn)作為設(shè)計(jì)模式紀(jì)錄下來(lái),它使人們可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu),幫助開(kāi)發(fā)人員做出有利于系統(tǒng)復(fù)用的選擇。設(shè)計(jì)模式解決特定的設(shè)計(jì)問(wèn)題,使面向?qū)ο笤O(shè)計(jì)更靈活、優(yōu)雅,最終復(fù)用性更好。然而,設(shè)計(jì)模式雖然給了我們?cè)O(shè)計(jì)的典范與準(zhǔn)則,通過(guò)最大程度的利用面向?qū)ο蟮奶匦?,諸如利用繼承、多態(tài),對(duì)責(zé)任進(jìn)行分離、對(duì)依賴(lài)進(jìn)行倒置,面向抽象,面向接口,最終設(shè)計(jì)出靈活、可擴(kuò)展、可重用的類(lèi)庫(kù)、組件,乃至于整個(gè)系統(tǒng)的架構(gòu)。在設(shè)計(jì)的過(guò)程中,通過(guò)各種模式體現(xiàn)了對(duì)象的行為,暴露的接口,對(duì)象間關(guān)系,以及對(duì)象分別在不同層次中表現(xiàn)出來(lái)的形態(tài)。然而鑒于對(duì)象封裝的特殊性,“設(shè)計(jì)模式”的觸角始終在接口與抽象中大做文章,而對(duì)于對(duì)象內(nèi)部則無(wú)能為力。
Aspect-Oriented Programming(面向方面編程,AOP)正好可以解決這一問(wèn)題。它允許開(kāi)發(fā)者動(dòng)態(tài)地修改靜態(tài)的OO模型,構(gòu)造出一個(gè)能夠不斷增長(zhǎng)以滿(mǎn)足新增需求的系統(tǒng),就象現(xiàn)實(shí)世界中的對(duì)象會(huì)在其生命周期中不斷改變自身,應(yīng)用程序也可以在發(fā)展中擁有新的功能。AOP利用一種稱(chēng)為“橫切”的技術(shù),剖解開(kāi)封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類(lèi)的行為封裝到一個(gè)可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡(jiǎn)單地說(shuō),就是將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任,例如事務(wù)處理、日志管理、權(quán)限控制等,封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來(lái)的可操作性和可維護(hù)性。
面向方面編程(AOP)是施樂(lè)公司帕洛阿爾托研究中心(Xerox PARC)在上世紀(jì)90年代發(fā)明的一種編程范式。但真正的發(fā)展卻興起于近幾年對(duì)軟件設(shè)計(jì)方興未艾的研究。由于軟件系統(tǒng)越來(lái)越復(fù)雜,大型的企業(yè)級(jí)應(yīng)用越來(lái)越需要人們將核心業(yè)務(wù)與公共業(yè)務(wù)分離。AOP技術(shù)正是通過(guò)編寫(xiě)橫切關(guān)注點(diǎn)的代碼,即“方面”,分離出通用的服務(wù)以形成統(tǒng)一的功能架構(gòu)。它能夠?qū)?yīng)用程序中的商業(yè)邏輯同對(duì)其提供支持的通用服務(wù)進(jìn)行分離,使得開(kāi)發(fā)人員從重復(fù)解決通用服務(wù)的勞動(dòng)中解脫出來(lái),而僅專(zhuān)注于企業(yè)的核心商業(yè)邏輯。因此,AOP技術(shù)也就受到越來(lái)越多的關(guān)注,而應(yīng)用于各種平臺(tái)下的AOP技術(shù)也應(yīng)運(yùn)而生。但由于AOP技術(shù)相對(duì)于成熟的OOP技術(shù)而言,在性能、穩(wěn)定性、適用性等方面還有待完善,同時(shí)AOP技術(shù)也沒(méi)有形成一個(gè)統(tǒng)一的標(biāo)準(zhǔn),這使得AOP技術(shù)的研究更具有前沿性的探索價(jià)值。
轉(zhuǎn)貼來(lái)自:
http://www.cnblogs.com/wayne-ivan/archive/2006/09/07/496901.html
posted on 2007-05-30 11:35
★yesjoy★ 閱讀(250)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
AOP(面向方面編程)