論AOP面向切面編程思想

程序員

原文: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設計經驗總結爲設計模式,讓開發者能複用成功的設計和體系結構。設計模式解決特定的設計問題,使面向對象設計更靈活、優雅,最終複用性更好。然而,設計模式雖然給了咱們設計準則與典範,最大程度的利用面向對象特性,諸如利用封裝、繼承、多態,對責任進行分離、對依賴進行倒置,面向抽象,面向接口,最終設計出靈活、可擴展、可重用的類庫、組件,乃至於整個系統的架構。在設計的過程當中,經過各類模式體現了對象的行爲,暴露的接口,對象間關係,以及對象分別在不一樣層次中表現出來的形態。然而鑑於對象封裝的特殊性,「設計模式」的觸角始終在接口與抽象中大作文章,而對於對象內部則無能爲力。spa

 

 

3【AOP面向切面編程】設計

AOP剛好能夠作到這個!它支持動態修改OO模型,能在不破壞封裝的前提下,動態的擴展功能!就像現實世界中,對象也會在其生命週期中不斷變化,應用程序也能夠擁有新的功能。AOP剖解開封裝的對象內部,將那些分散在多個類的共同行爲封裝成一個可重用模塊,並將其名爲「Aspect」,就是將那些與業務無關,卻爲業務模塊所共同調用的邏輯,如事務、日誌、權限、緩存等封裝起來,能夠減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可操做性和可維護性。

 

因爲軟件系統愈來愈複雜,大型的企業級應用愈來愈須要人們將核心業務與公共業務分離。AOP能支持分離通用服務造成統一功能架構,可以將應用程序中的業務邏輯和通用服務進行分離,讓開發人員專一於企業的核心業務邏輯,通用邏輯經過AOP的方式統一提供!

 

4【AOP優點】

AOP實際上是OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來創建一種對象層次結構,用以模擬公共行爲的一個集合。當咱們須要爲分散的對象引入公共行爲的時候,OOP則顯得無能爲力。而AOP卻能作到把動態修改對象,將通用功能注入!

 

 

AOP前:權限/異常/日誌/緩存功能須要寫入每一個具體的業務功能模塊,AOP後:權限/異常/日誌/緩存功能封裝成獨立的模塊,能動態提供給不一樣的業務模塊。具體分析,OOP程序設計結合上AOP,優點主要表如今:

一、將通用功能從業務邏輯中抽離,能夠避免大量重複代碼(不須要處處都寫),有利於代碼維護升級,也有利於項目的規範化開發(通用功能再也不是各寫各樣);

二、AOP有利於軟件設計的模塊化,下降軟件架構的複雜度。能把通用功能抽出來,那麼在系統設計時就只須要專一於業務邏輯開發設計(再也不操心通用功能)。

 

【結語】

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

 

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

相關文章
相關標籤/搜索