原文:
【前言】
aop(aspect-oriented programming)面向切面程式設計思想已經有多年歷史了,但是在.net裡面一直沒有得到重視,不過這在mvc框架後被變革了,aop思想開始在.net流行起來,各種框架元件裡面,面向切面已經是標配了,各種筆試面試的過程中,更是不可或缺的!下面eleven就來好好說說對aop的理解,以及在.net裡面幾種實現方式。
1【物件導向程式設計】
物件導向程式設計oop大家都耳熟能詳,熟練的不能再熟練了,但是這真的是乙個很偉大的設計思想!軟體設計因為引入oop而逐漸變得豐富起來。「一切皆為物件」的精義,使得程式世界所要處理的邏輯簡化,開發者可以用一組物件以及這些物件之間的關係將軟體系統形象地表示出來。而從物件的定義,進而到模組,到元件的定義,利用oop的封裝、繼承、多型,讓軟體開發可以像建房那樣循序漸進,先燒磚(類)到砌牆(類庫),從樓層(模組)到大廈(系統),甚至可以建立整個城市(網際網路)!
在一些簡單的小應用上,oop可能還覺得麻煩,但是在設計規模更大、邏輯更複雜的系統時,開發周期反而能變的更短。有了oop,我們才能化繁為簡,用一種模式然後疊加,最終去建立大型複雜的系統,物件導向設計技術居功至偉。
2【oop的問題】
物件導向設計的唯一問題是,它本質是靜態&封閉,任何需求的細微變化都可能對系統造成重大影響。常見的解決辦法是設計模式(designpattern)。gof將oop設計經驗總結為設計模式,讓開發者能復用成功的設計和體系結構。設計模式解決特定的設計問題,使物件導向設計更靈活、優雅,最終復用性更好。然而,設計模式雖然給了我們設計準則與典範,最大程度的利用物件導向特性,諸如利用封裝、繼承、多型,對責任進行分離、對依賴進行倒置,面向抽象,面向介面,最終設計出靈活、可擴充套件、可重用的類庫、元件,乃至於整個系統的架構。在設計的過程中,通過各種模式體現了物件的行為,暴露的介面,物件間關係,以及物件分別在不同層次中表現出來的形態。然而鑑於物件封裝的特殊性,「設計模式」的觸角始終在介面與抽象中大做文章,而對於物件內部則無能為力。
3【aop面向切面程式設計】
aop恰好可以做到這個!它支援動態修改oo模型,能在不破壞封裝的前提下,動態的擴充套件功能!就像現實世界中,物件也會在其生命週期中不斷變化,應用程式也可以擁有新的功能。aop剖解開封裝的物件內部,將那些分散在多個類的共同行為封裝成乙個可重用模組,並將其名為「aspect」,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯,如事務、日誌、許可權、快取等封裝起來,可以減少系統的重複**,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
由於軟體系統越來越複雜,大型的企業級應用越來越需要人們將核心業務與公共業務分離。aop能支援分離通用服務形成統一功能架構,能夠將應用程式中的業務邏輯和通用服務進行分離,讓開發人員專注於企業的核心業務邏輯,通用邏輯通過aop的方式統一提供!
4【aop優勢】
aop其實是oop的補充和完善。oop引入封裝、繼承和多型性等概念來建立一種物件層次結構,用以模擬公共行為的乙個集合。當我們需要為分散的物件引入公共行為的時候,oop則顯得無能為力。而aop卻能做到把動態修改物件,將通用功能注入!
aop前:許可權/異常/日誌/快取功能需要寫入每個具體的業務功能模組,aop後:許可權/異常/日誌/快取功能封裝成獨立的模組,能動態提供給不同的業務模組。具體分析,oop程式設計結合上aop,優勢主要表現在:
1、將通用功能從業務邏輯中抽離,可以避免大量重複**(不需要到處都寫),有利於**維護公升級,也有利於專案的規範化開發(通用功能不再是各寫各樣);
2、aop有利於軟體設計的模組化,降低軟體架構的複雜度。能把通用功能抽出來,那麼在系統設計時就只需要專注於業務邏輯開發設計(不再操心通用功能)。
【結語】
aop 面向切面程式設計
起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...
AOP面向切面程式設計
1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...
AOP 面向切面程式設計
aop aspect oriented programming 即面向切面程式設計,可以說是oop object oriented programming 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...