1. 程式人生 > >論AOP面向切面編程思想

論AOP面向切面編程思想

clas 可操作性 面試 小應用 文章 人員 建立 程序設計 對象的定義

原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg


【前言】

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有利於軟件設計的模塊化,降低軟件架構的復雜度。能把通用功能抽出來,那麽在系統設計時就只需要專註於業務邏輯開發設計(不再操心通用功能)。

【結語】

大談了一篇純理論性的東西,不知道小夥伴兒們能get多少,後續會更新多篇Demo,從C#的具體實現來看看AOP的效果。歡迎關註公眾號,歡迎討論,歡迎轉發,願天下有需求的人都能看到!

技術分享圖片

歡迎關註公眾號【程序員在職場】獲取更多幹貨~

論AOP面向切面編程思想