软件中 与业务无关的公共模块如日志系统,权限验证 等等会大量的存在于系统方法里。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.使用反射发出动态构建代理类