美文网首页
aop面向切面思想

aop面向切面思想

作者: 没风的地方 | 来源:发表于2018-04-18 21:15 被阅读60次

    你问什么是aop,别人都只是说是面向切面编程,一脸懵逼。

    看了很多文章,很多说到把业务流程中无关的东西独立出来,也有的人说可以把业务逻辑中相同的部分独立出来,刚开始我想,这不就是封装吗。但很重要的一点是,aop的思想是让某个模块能重用,虽说封装让代码的重复率大大降低,但代码还是被污染了,毕竟封装之后你还是要调用的。而aop思想比封装隔离得更加彻底,在业务逻辑里面不需要出现调用已经使用aop独立出来的代码,你仅仅是使用aop框架指定在哪里使用独立出来的代码。

    *敲黑板(根本区别):aop与封装的原理一样,唯一区别的是调用的方式不同:1封装的代码需要在业务逻辑中调用,而aop是通过框架调用,你的业务逻辑代码不需调用,这样你的业务逻辑代码就可以复用了

    上面这一段话也恰好证明了用aop封装业务逻辑中某个部分是不对的,你封装了某个部分(也就是业务逻辑的某个环节),整个业务逻辑就无法重用,为什么?因为它少了某个环节。

    其实有没有发现上面这段话错了,被我带坑里了,哈哈。其实aop作为封装的升级版,既包含封装的特点,即被封装代码的重用性,但也有自己的特点:把业务逻辑无关代码封装,进行无形调用,这样整个业务逻辑就没有无关代码,其他地方就可以复用了。

    举例子(证明aop必要性):

    登录——购买——完成

    在这个逻辑里面,我需要打印log,还做一些统计,如果不用aop封装,那么另一个使用这个流程的程序想复用,这个程序的这个流程不需要打印log和统计,复用起来就会有log和统计了,这是不好的。

    举例子(证明aop的过度使用):

    登录——购买

    登录——修改密码

    登录——发丑照

    在这三个流程中都有登录,那么使用aop重用,这样是可以的,但在这里我觉得直接封装比较好,明显的保持业务逻辑的完整性,而且效果一样。其实这样反而违反了aop的思想,因为你的整个业务逻辑不能重用。

    其实当某个方法需要重用是,在这里需要log和统计,在另一个地方不需要log和统计,使用aop之后,需要使用的地方就调用,不影响重用的地方。

    总结下:aop就是用来封装与业务逻辑无关的代码隐式调用,从而使得业务逻辑能重用,至于重用某一块业务代码,还是要用封装来保持业务逻辑完整性。

    如有错误,希望指正,感激不尽。

    突然发现mvp模式和mvvm模式的区别就跟aop和封装的区别很像,思想是一样的:

    aop通过aop中间类工具使得被aop的部分隐式调用,mvvm使用databinding(突如其来的懵逼)。

    相关文章

      网友评论

          本文标题:aop面向切面思想

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