aop面向切面思想

你问什么是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(突如其来的懵逼)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容