AOP(Aspect-Oriented Programming)面向切面編程思想做爲OOP的補充,在.Net領域也流行好幾年了,確實能解決OOP的頑疾,是OOP程序設計一大福音!如今各類框架組件裏面,AOP已是標配,各類筆試面試的過程當中,更是不可或缺的!上一篇Eleven從理論上細談了對AOP的理解,今天直接上C#實例!面試
【靜態AOP】編程
AOP要作的就是在不破壞封裝的前提下,去擴展新的功能。咱們應該很容易想到設計模式裏面的裝飾器模式和代理模式,下面分別看看具體實現:設計模式
interface IUserProcessor { void RegUser(User user); } public class UserProcessor : IUserProcessor { public void RegUser(User user) { Console.WriteLine("用戶已經註冊。Name:{0} PWD: {1}", user.Name, user.Pwd); } }
以上爲 原始的業務,實現爲:一個簡單的抽象+實現,裏面模擬完成用戶的註冊功能。框架
public class UserProcessorDecorator : IUserProcessor { private IUserProcessor _UserProcessor { get; set; } public UserProcessorDecorator(IUserProcessor userProcessor) { _UserProcessor = userProcessor; } public void RegUser(User user) { this.BeforProceed(user); this._UserProcessor.RegUser(user); this.AfterProceed(user); } }
組合+繼承的融合,是裝飾器模式的顯示特徵。這裏作到了經過Decorator來調用RegUser時,你在註冊用戶完成後加上另外的邏輯,同時也沒有破壞原有的封裝。this
public class ProxyUserProcessor:IUserProcessor { private IUserProcessor _UserProcessor = new UserProcessor(); public void RegUser(User user) { BeforeProceed(user); this._UserProcessor.RegUser(user); AfterProceed(user); } }
代理模式一樣簡單,作到了經過proxy來調用RegUser時,能在註冊用戶先後,分別加上額外的功能;同時也不會破壞原有的封裝性。spa
【動態AOP】設計
看完2中靜態AOP實現後,下列將經過動態AOP來實現;代理
public static class TransparentProxy { public static T Create<T>() { T instance = Activator.CreateInstance<T>(); return instance; } }