标签:异常 思考 family auto user 面向切面编程 实例 lte public
前言:
其实笔者在早三四年前就开始接触AOP, 但是一直未曾真正理解,当你开始理解就会明白使用它的好处,
这也是笔者花费挺长时间开始慢慢反省所得,希望在以后撸代码的日子里,多做思考而不是做个搬码的机器, 笔者在项目中使用的Spirng.net。
什么是AOP?AOP和OOP有什么关系?
AOP面向切面编程,它允许开发者动态的修改静态的OO模型。在运行时,动态的将代码切入到类的指定方法指定位置上
AOP和OOP的关系:个人觉得它是OOP思想的一种补充,打个比方,OOP是上下,AOP则兼顾左右
正因为可以动态的扩展功能,所以在程序设计时就可以有以下好处:
1 聚焦核心业务逻辑,权限/异常/日志/缓存/事务, 通用功能可以通过AOP方式添加,程序设计简单,
2 功能动态扩展;集中管理,代码复用;规范化
.NET常用的实现AOP 的框架有哪些?
就笔者所知道的而言:Autofac、Spring.Net、Castle、Unity
实现AOP的几种方式:
1.静态实现--装饰器/代理模式
2.动态实现--Remoting/Castle(Emit)
3.静态织入--PostSharp(收费)--扩展编译工具,生成的加入额外代码
4.依赖注入容器的AOP扩展(开发)
5.MVC的Filter--特性标记,然后该方法执行前/后就多了逻辑
invoker调用中心--负责反射调用方法--检查特性--有则执行额外逻辑
静态实现-装饰器/代理模式 代码示例:
/// <summary> /// 装饰器模式实现静态代理 /// AOP在方法前后增加自定义的方法 /// </summary> public class DecoratorAOP { public static void Show() { User user = new User() { Name = "John", Password = "123123123123" }; IUserProcessor processor = new UserProcessor(); processor.RegUser(user); Console.WriteLine("***************"); //实例化UserProcessorDecorator这是构造方法 //需要IUserProcessor类型的参数 processor = new UserProcessorDecorator(processor); processor.RegUser(user); } public interface IUserProcessor { void RegUser(User user); } public class UserProcessor : IUserProcessor { public void RegUser(User user) { Console.WriteLine("用户已注册。Name:{0},PassWord:{1}", user.Name, user.Password); } } public class UserProcessorDecorator : IUserProcessor { private IUserProcessor _UserProcessor { get; set; } public UserProcessorDecorator(IUserProcessor userprocessor) { this._UserProcessor = userprocessor; } public void RegUser(User user) { BeforeProceed(user); this._UserProcessor.RegUser(user); AfterProceed(user); } /// <summary> /// 业务逻辑之前 /// </summary> /// <param name="user"></param> private void BeforeProceed(User user) { Console.WriteLine("方法执行前"); } /// <summary> /// 业务逻辑之后 /// </summary> /// <param name="user"></param> private void AfterProceed(User user) { Console.WriteLine("方法执行后"); } }
再来谈谈Spring.net
Spring.Net从根本意义上来说,是对Spring工具从Java平台向.Net平台的完全移植。它在AOP的实现上与Spring几乎完全相似,
仍然利用了AOP联盟提供的拦截器、Advice等实现AOP。Spring.Net的配置文件也与Spring相同。
伪代码示例:
//Spring文件夹下的配置文件,type中第一个是完整类名,第二个是命名空间名
<object id="LaborSuppliesDAL" type="xxx.DAL.LaborSuppliesDAL,xx.LaborSuppliesManage.DAL" autowire="autodetect" singleton="false"></object>
//读取配置的LaborSuppliesDAL类,此时已经把LaborSuppliesDAL这个类切入到某个类中了,如果想要使用LaborSuppliesDAL的某个方法,直接通过_dal.方法名就行
private readonly LaborSuppliesDAL _dal = SpringReg.SpringInfo<LaborSuppliesDAL>("LaborSuppliesDAL");
标签:异常 思考 family auto user 面向切面编程 实例 lte public
原文地址:https://www.cnblogs.com/JohnTang/p/11108672.html