C#中面向切面编程AOP

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;

            
        }
    }
相关文章
相关标签/搜索