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; } }