Design Pattern — 切面程式設計(AOP)

莊創偉
Feb 1, 2021

--

維基說明

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這套,希望之後不會收費。

AspectInjector使用介紹

--

--

莊創偉

學海無涯。但是為了生計還是得下海的風塵男子