AOP 並不是Design Pattern 中的一種,但是其概念與Porxy Pattern 相近。可以視為實現Porxy Pattern 的一種方法。
AOP 是指每個類別或方法都應該只關注在核心功能的設計。而將非核心的部分程式抽離出來已橫切的形式疊加在核心功能上。
這種做法使得核心功能的維護變得單純且提高了再使用性。
假設我們有個方法如下
class RealItem{ public void DoSomething(){ Stopwatch watch = new Stopwatch(); watch.Start(); Console.WriteLine("DoSomething"); watch.Stop(); Console.WriteLine("花費 :" + watch.ElapsedMilliseconds + "毫秒");
}
}
可以看出這個方法一共做了兩件事。一個是列印”DoSomething” ,一個是計算耗時。
AOP 告訴我們應該要將不同的關注點拆離出來,而非綁在一起。
在 C# MVC 中的 可以透過 Control 類別中的 OnActionExecuting、OnActionExecuted 或ActionFilter來捕抓目標達到動態縫入關注點。
而其他第三方AOP套件中比較有名的有PosTt Sharp、 Castle.DynamicProxy。
其中PosTt Sharp 3.0 開始要收費,Castle.DynamicProxy 目前對非同步方法處理稍微麻煩。
所以我個人是使用 AspectInjector這套,希望之後不會收費。