Unity实现AOP 初步学习

OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统

类--砖头 系统--房子

类--细胞 系统--人

面向对象是非常适合做大型系统的,但是它应对需求变化扩展的时候会比较困难;

面向对象是静态的:任何需求的细微变化,都有可能导致比较大的影响。

设计模式:用来设计出灵活、可扩展、可重用的架构 但是只能解决部分问题,因为设计模式都是在折腾抽象/类,这样就注定了,设计模式永远无法解决类的内部变化问题。

 

AOP:面向切面编程 编程思想

设计出来就是为了解决类的内部变化问题。

能做到让开发者动态的修改一个静态的面向对象模型。

在不破坏封装的前提下,去增加各种功能;一般是一些非业务逻辑,是一些公共逻辑(比如登录权限验证,异常处理,日志打印等等)。

AOP是对OOP的有效补充,有了AOP后,OOP也会变的更加简单。

 

下面说的是Unity的AOP实现

首先打开vs的Nuget包 为项目引入Unity组件Unity实现AOP 初步学习

 

引入后在对应的项目下,会创建一个Unity.Config文件 CfgFiles/Unity.ConfigUnity实现AOP 初步学习

 

 

根据我的这个模板进行填写,将你用到的抽象类、实体类和需要执行公共逻辑的类输入就算配置完成了。

 

ok,配置完成后,就可以放飞自我了。Unity实现AOP 初步学习

 

 

在使用的时候配置一下我们的容器,当然这个配置可以提取成方法放到其他地方都可以。

配置完成后,拿到container 配置好的对象

IUnityHj processor = container.Resolve<IUnityHj>();

这个IUnityHj 就是我们配置的抽象接口,通过container.Resolve 可以拿到我们在配置文件中配置的实体类对象。

 

然后就可以正常调用方法了。

 

下面介绍一下用的公共逻辑类Unity实现AOP 初步学习

 

继承并实现我们的接口 - IInterceptionBehavior

拿到我们的Invoke方法,在Invoke方法里面写我们需要的公共逻辑即可

IMethodReturn methodReturn = getNext()(input, getNext);

这个动作决定了我们的正常业务逻辑执行的地方,可以通过这个来决定,我们的公共逻辑是在业务逻辑之前还是在业务逻辑之后。

最后记得返回一下 return methodReturn;