美文网首页
AOP的设计思想以及ThinkPHP与Laravel的AOP思想

AOP的设计思想以及ThinkPHP与Laravel的AOP思想

作者: haokeed | 来源:发表于2019-08-11 08:58 被阅读0次

    1. AOP设计思想

    1.1 什么是AOP

    AOP,即面向方面编程,是OOP面向对象编程的补充,OOP引入封装、继承和多态建立对象层次结构; AOP 引入切面建立对象的水平结构。

    1.2 AOP思想

    AOP把软件系统一分为二——核心关注点和横切关注点,进行解耦分离。业务处理主流程是核心关注点;辅助功能流程是横切关注点,特点是,辅助关注点散布在各个核心关注点的层次结构中。如权限认证、日志、事务处理。造成代码重复,业务耦合

    1.3 业务拆分举例

    AOP是一个横向关系,以横向切面技术,进行模块解耦,把功能代码封装成重用模块——Aspect切面,例如:订单核心业务S是一个球,日志功能N也是一个球,AOP思想把两个球以切面并排,从S获取内部消息(参数),传到N中,N代理执行通用代码,实现模块解耦

    1.4 AOP实现技术分类

    AOP技术实现分两类:一是采用动态代理技术,截取消息,代理执行取代原有核心关注点执行;二是采用静态织入的方式,引入特定的语法创建切面,让编译器可以在编译期间织入有关切面的通用代码

    1.5 从OOP到AOP

    image.png

    在开发中,为了给业务方法增加日志记录、权限检查、事务控制等功能,此时我们需要去修改业务方法代码,考虑到代码的复用性。

    我们可以考虑使用OOP的继承和组合来消除重复,但是无论怎么样,我们都会在业务方法中纵向地增加这些功能方法的调用代码。

    此时,既不遵循开闭原则,也为后期系统的维护带来很大的麻烦

    这些零散存在于业务方法中的功能代码,我们称之为横切面关注点,横切面关注点不属于业务范围,应该从业务代码中剥离出来。

    为了解决该问题,OOP思想肯定是不行了,要使用AOP思想。

    AOP (Aspect Oritention Programming)--把一个个的横切关注点放到某个模块中去,称之为切面。那么每一个的切面都能影响业务的某一种功能,切面的目的就是功能增强,如日志切面就是一个横切关注点,应用中许多方法需要日志记录的只需要插入日志的切面即可。


    image.png

    这种面向切面编程的思想就是AOP思想了。

    1.6 AOP术语

    Joinpoint:连接点,被拦截到需要被增强的方法。where:去哪里做增强

    Pointcut:切入点,哪些包中的哪些类中的哪些方法,可认为是连接点的集合。where:去哪些地方做增强

    Advice:增强,当拦截到Joinpoint之后,在方法执行的什么时机(when)做什么样(what)的增强。根据时机分为:前置增强、后置增强、异常增强、最终增强、环绕增强

    Aspect:切面,Pointcut+Advice,去哪些地方+在什么时机+做什么增强

    Target:目标对象,被代理的目标对象

    weaving:织入,把Advice加到Target上之后,创建出Proxy对象的过程

    Proxy:一个类被AOP织入增强后,产生的代理类

    Adivce(增强)执行时机:


    image.png

    1.7 各种时机的增强

    image.png
    image.png

    2. ThinkPHP

    待定....

    3. Laravel

    待定....

    参考:

    1. https://blog.csdn.net/qq_37192800/article/details/86494953
    2. https://blog.csdn.net/weixin_36328444/article/details/81322484

    相关文章

      网友评论

          本文标题:AOP的设计思想以及ThinkPHP与Laravel的AOP思想

          本文链接:https://www.haomeiwen.com/subject/kydjjctx.html