AOP(Aspect Oriented Programming) 面向切面编程

起源

引言  http://wayfarer.cnblogs.com/articles/241012.html

AOP技术基础  https://www.cnblogs.com/wayfarer/articles/241024.html

.Net平台AOP技术研究 https://www.cnblogs.com/wayfarer/articles/256909.html

AOP、POP、OOP 区别与联系

POP面向过程编程:符合逻辑思维,线性的处理问题-----无法应付复杂的系统

OOP面向对象编程:万物皆对象,对象交互完成功能,功能叠加成模块,模块组成系统,去搭建复杂的大型软件系统
 类----功能点---模块----系统
 类却是会变化的,增加日志/异常/权限/缓存/事务,只能修改类?
 GOF的23种设计模式,应对变化,核心套路是依赖抽象,细节就可以变化
 但是只能替换整个对象,但是没办法把一个类动态改变

AOP(Aspect):允许开发者动态的修改静态的OO模型,就像现实生活中对象在生命周期中会不断的改变自身。
AOP是一种编程思想,是OOP思想的补充

正是因为能够动态的扩展功能,所以在程序设计时就可以有以下好处:
1 聚焦核心业务逻辑,权限/异常/日志/缓存/事务, 通用功能可以通过AOP方式添加,程序设计简单,
2 功能动态扩展;集中管理,代码复用;规范化;

实现AOP的多种方式
a 静态实现--装饰器/代理模式
b 动态实现--Remoting/Castle(Emit)
c 静态织入--PostSharp(收费)--扩展编译工具,生成的加入额外代码
d 依赖注入容器的AOP扩展(开发)
e MVC的Filter--特性标记,然后该方法执行前/后就多了逻辑  invoker调用中心--负责反射调用方法--检查特性--有则执行额外逻辑 

A 装饰器模式实现静态代理-AOP 在方法前后增加自定义的方法

 1     public class Business : IBusiness
 2     {
 3         public virtual void DoSomething()
 4         {
 5             Console.WriteLine("DoSomething");
 6         }
 7     }
 8     public class BusinessAOP : IBusiness
 9     {
10         public BusinessAOP(IBusiness IBusiness)
11         {
12             this._IBusiness = IBusiness;
13         }
14         private IBusiness _IBusiness;
15         public override void DoSomething()
16         {
17             BeforeProceed();
18             this._IBusiness.DoSomething();
19             AfterProceed();
20         }
21         /// <summary>
22         /// 业务逻辑之前
23         /// </summary>
24         /// <param name="user"></param>
25         private void BeforeProceed()
26         {
27             Console.WriteLine("方法执行前");
28         }
29         /// <summary>
30         /// 业务逻辑之后
31         /// </summary>
32         /// <param name="user"></param>
33         private void AfterProceed()
34         {
35             Console.WriteLine("方法执行后");
36         }
37     }
38     public interface IBusiness
39     {
40         void DoSomething();
41     }
42       //前端调用
43       new BusinessAOP(new Business()).DoSomething();
View Code

相关文章:

  • 2021-12-22
  • 2021-04-05
  • 2021-03-31
猜你喜欢
  • 2021-11-23
  • 2021-11-23
  • 2021-08-23
  • 2021-07-20
  • 2021-07-12
相关资源
相似解决方案