AOP 实现

软件中 与业务无关的公共模块如日志系统,权限验证 等等会大量的存在于系统方法里。AOP 目的是分离这部分公共模块与业务逻辑之间的关系。

先定义业务接口:

 

  public interface IVehInfo
    {
        int GetVehicleCount();
    }

    public class Car : IVehInfo
    {

        public int GetVehicleCount()
        {
            Console.Write("Log Begian");//记录日志
            var i = 100;
            Console.Write("Log End");
            return i;
        }
    }

如何避免出现这种公共模块行为污染业务行为的方式。


1.使用代理类

    public interface IVehInfo
    {
        int GetVehicleCount();
    }

    public class Car : IVehInfo
    {

        public int GetVehicleCount()
        {
            return 100;
        }
    }



    public class CarProxy : IVehInfo
    {
        private readonly Car nCarc;
        public CarProxy(Car oCar)
        {
            this.nCarc = oCar;
        }



        public int GetVehicleCount()
        {
            Console.Write("Log Begian");//记录日志
           var ct= nCarc.GetVehicleCount();
            Console.Write("Log End");
            return ct;
        }
    }

这样做坏处是需要写大量的代理类,导致对象大爆炸。

2.使用反射发出动态构建代理类

 

posted @ 2014-10-20 10:10  坚硬的鸡蛋  阅读(98)  评论(0编辑  收藏  举报