问题描述
- 如何理解面向切面编程?
-
什么才是面向切面?怎么理解?实际编程中该如何思考?程序中体现在什么地方?
解决方案
其实这不过是一个热炒的概念,说的很故弄玄虚,其实真正应用场景有限。常见的场景只有两个,一个是权限的判断,一个是日志的记录。你编写很多业务逻辑,都需要在代码上增加这些类似的重复的代码。
我们希望把这些前置后置的重复的代码从业务中提取出来,放在单独的地方只写一次,实现这样功能的框架被冠以一个名词就是AOP。
解决方案二:
首先面向切面编程是什么。
就指是把逻辑代码和处理琐碎事务的代码分离开,以便能够分离复杂度。
让人在同一时间只用思考代码逻辑,或者琐碎事务。
代码逻辑比如是插入一条数据,那么琐碎事务就包括获取连接和关闭连接,事务开始,事务提交。
切面就是指在大堆繁琐事务中的逻辑代码。
然后举个例子:
先假设你有一段逻辑代码要写~ 在这段代码之前要写log;代码完成之后要写log。结局就是一大堆的log代码就淹没了逻辑代码。
aop的想法就是将非逻辑部分的代码抽离出来,只考虑逻辑代码就行了,我把框框画好,这里写前面的log,这里写逻辑,这里写后面的log。
事实上用着嘛~ 我没用过。逻辑代码好像和非逻辑代码是分开在不同文件的。个人觉得跳文件也很烦躁。
感觉应该是系统大到某种程度才会需要这么严格的复杂度控制吧。
--------------------------无责任吐槽分割线--------------------------
(本故事纯属虚构,如有雷同纯属巧合)
虽然我没用过,但是突然想到我曾经在某个系统里见过这货。这个系统是这样的,使用了aop,将数据库的事务管理啊什么的都搞定了封印了。 但是,这个系统的log语句没有被封印,逻辑代码都还被logger.log("xxxxx")这样的语句给包围着。 如果说一个函数的话,可能就是有一半在做log,一个类有一半在做log。就算框架给框框画好了要用aop,也有人有办法不用,或者用不好。
其实不用aop的框架的话,也可以把前面和后面的琐碎事务自己抽象一下也能分开,这虽然不用框架但是也有aop的意思,就把琐碎事务都压缩到一个前置函数和一个后置函数里面。
解决方案三:
面向切面编程
(
AOP
是
Aspect?Oriented?Program
的首字母缩写)
?
,我们知道,面向对象的
特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中
往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一
个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
??
??????
但是人......
答案就在这里:面向切面编程 理解