架构师修养 AOP 及实践

AOP面向切面编程

实现示例
公共代码

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
    }
    public interface IUserProcessor
    {
        void RegUser(User user);
        User GetUser(User user);
    }

    public class UserProcessor : IUserProcessor
    {
        public User GetUser(User user)
        {
            throw new NotImplementedException();
        }

        public void RegUser(User user)
        {
            Console.WriteLine("正在用户注册,用户名称{0} Password{1}", user.Name, user.Password);
        }
    }

静态AOP实现

装饰模式静态代理

 class DecroratorUser : IUserProcessor
    {
        readonly IUserProcessor m_old;
        public DecroratorUser(IUserProcessor old)
        {
            m_old = old;
        }

        public User GetUser(User user)
        {
            throw new NotImplementedException();
        }

        public void RegUser(User user)
        {
            Console.WriteLine("开始装饰");
            m_old.RegUser(user);
            Console.WriteLine("结束装饰");
        }
    }

代理模式静态代理

 class ProxyUser : IUserProcessor
    {
        readonly UserProcessor m_realUserProcessor = new UserProcessor();

        public User GetUser(User user)
        {
            throw new NotImplementedException();
        }

        public void RegUser(User user)
        {
            Console.WriteLine("开始代理");
            m_realUserProcessor.RegUser(user);
            Console.WriteLine("结束代理");
        }
    }

动态代理AOP实现

Remoting方式

          User user = new User()
            {
                Name = "Eleven",
                Password = "123456"
            };
            UserProcessor userProcessor = TransparentProxy.Create<UserProcessor>();
            userProcessor.RegUser(user);
 /// <summary>
    /// 真实代理
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class LocalRealProxy<T> : RealProxy
    {
        readonly T tTarget;
        public LocalRealProxy(T target)
            : base(typeof(T))
        {
            this.tTarget = target;
        }

        public override IMessage Invoke(IMessage msg)
        {
            BeforeProceede(msg);//Log  try-catch

            IMethodCallMessage callMessage = (IMethodCallMessage)msg;
            object returnValue = callMessage.MethodBase.Invoke(this.tTarget, callMessage.Args);

            AfterProceede(msg);

            return new ReturnMessage(returnValue, new object[0], 0, null, callMessage);
        }
        public void BeforeProceede(IMessage msg)
        {
            Console.WriteLine("开始代理");
        }
        public void AfterProceede(IMessage msg)
        {
            Console.WriteLine("结束代理");
        }
    }
    /// <summary>
    /// 透明代理
    /// </summary>
    public static class TransparentProxy
    {
        public static T Create<T>()
        {
            T instance = Activator.CreateInstance<T>();
            LocalRealProxy<T> realProxy = new LocalRealProxy<T>(instance);
            T transparentProxy = (T)realProxy.GetTransparentProxy();
            return transparentProxy;
        }
    }

Unity中的AOP

引入unity 配置文件,
可以进行多重拦截,
可以实现 权限、日志、异常、性能分析、缓存、验证 多重拦截
动态化配置即可实现功能, 原有代码 0 侵入

由于代码较多,故 作为资源上传
下载Unity AOP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值