第五章 面向方面编程___OOP和AOP随想
面向方面编程,又称面向切面编程(Aspect-Oriented-Programming),英文缩写 AOP,可以说是 OOP(Object-Oriented-Programming)面向对象编程的补充和完善。OOP 引入封装,继承,多态性等概念来建立一种对象层次结构,这种对象层次结构通俗的说也就是我们所说的软件。对于 OOP,我记得 Bruce Eckel 有一句名言,“ Everything is Object. ”,中文翻译为 “万物皆对象” 。我们可以将万物定义为一些对象,并将这些对象的行为和属性封装起来,同时定义好对象与对象之间的关系。实质上,在现实开发中,往往有一些角落一直以来被 OOP 忽略或者说未能解决好的,AOP 是 OOP 的一种补充或某种改进,它转换了编程的方式和视角。
在我们以往的开发中,有一些代码往往和核心业务无关,但却大量的分布在所有的对象层次当中。比如:银行业务和事务处理之间,一个是银行的核心业务,一个是非核心业务,他们并从业务的角度上来说,并没有什么真的关联,但是他们却没有彼此分离开来,还有诸如银行业务与日志记录,权限验证,性能检测等等功能,没有与核心业务分离开来。
如图,核心 业务模块A 中与 核心业务模块B 之中都包含了与他们的核心业务无关的逻辑,最终造成的高耦合状态。

通过上图我们可以知道,当在软件开发中我们要为这些分散的对象引入公共的行为时,OOP 则显得无力。OOP 定义了从上到下的关系,但是并不适合定义从左到右的关系。这时,当 OOP 正在为定义这些左右关系而烦劳的时候,AOP (面向方面编程) 出现了。

通过 AOP(面向方面的编程),可以将程序的责任分开,对象与方面互不干扰。面向方面的模块并非显式地为对象所调用,而是通过或注入或截取的方式,去获得被封装的对象内部方法间的消息,然后做出相应地处理。也许面向方面的模式破坏了对象的封装,却正其如此,方才能降低模块与模块之间的耦合度。同样地,通过对“方面”的封装,将这些通用的功能从不同的类中分离出来,使不同的模块都能共享同样的“方面”,这也极大地减少了重复代码。通过上面的图可以看出,通过 AOP 的方式,将业务逻辑和横切逻辑从业务模块中分离出来,极大的降低了系统的耦合。
如果说 “对象” 是一根竹竿,竹竿其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这一根竹竿切成很多截,以获得其内部的消息。而切开的竹截,也就是所谓的 “方面” 了。然后它又巧妙的将这些切开的切面复原,不留痕迹。
本系列导航帖 : http://www.cnblogs.com/cilence/archive/2013/02/21/2920455.html
由于个人水平有限,以上字符仅代表个人观点。
第五章 面向方面编程___OOP和AOP随想的更多相关文章
- 第五章 面向方面编程___AOP入门
上一篇讲了 AOP 和 OOP 的区别,这一次我们开始入门 AOP .实现面向方面编程的技术,主要分为两大类: 一是 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行: ...
- Spring详解(五)------面向切面编程
.AOP 什么? AOP(Aspect Oriented Programming),通常称为面向切面编程.它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的 ...
- Spring企业级程序设计 • 【第3章 面向切面编程】
全部章节 >>>> 本章目录 3.1 AOP基本概念和术语 3.1.1 AOP概念 3.1.2 AOP的术语解释 3.1.3 通知类型介绍 3.1.4 通过AOP模拟事务操 ...
- Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤
一.AOP [知识点详解] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执 ...
- 面向切面编程(Spring AOP)
一.什么是AOP AOP即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.主要体现在日志记录.性能统计.安全控制.事务处理和异常处理等. 1.相关概念 二.切面.切入点配 ...
- Spring 08: AOP面向切面编程 + 手写AOP框架
核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...
- JAVA Spring 面向切面编程 基本案例(AOP)
< 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- Spring AOP——Spring 中面向切面编程
前面两篇文章记录了 Spring IOC 的相关知识,本文记录 Spring 中的另一特性 AOP 相关知识. 部分参考资料: <Spring实战(第4版)> <轻量级 JavaEE ...
- Spring(三)面向切面编程(AOP)
在直系学长曾经的指导下,参考了直系学长的博客(https://www.cnblogs.com/WellHold/p/6655769.html)学习Spring的另一个核心概念--面向切片编程,即AOP ...
随机推荐
- ubuntu 14.04英文环境设置成中文
适用于ubuntu 14.04英文版的系统,其它版本的设置应该是大同小异的. 进入ubuntu系统,在顶部齿状标志找到system... 2.在personal找到Language Support 3 ...
- ny613 免费馅饼
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人 ...
- ios应用下架方法(说明)
ios应用下架方法(说明) 正在审核中的: 在binary details里边 reject按钮 已经上架的: 在itunesconnect里的app详情里面找到rights and pricin ...
- 用C++画光(三)——色散
写在前面 源码:https://github.com/bajdcc/GameFramework/blob/master/CCGameFramework/base/pe2d/Render2DScene5 ...
- 用C++画光(二)——矩形
在上篇文章的基础上,做了许多调整,修复了许多BUG.在解决bug的过程中,我逐渐领悟到一个要领:枯燥地一步步调试太痛苦了,找不到问题的根源!所以我选择将中间结果打到图片上.如: (注意,里面的点是我随 ...
- cocos2d-x 3.0点击响应
迄今为止,发现cocos2d-x 3.0最让人惊艳的地方就是更改了点击事件机制.(ps:迄今只看了点击事件这块,捂嘴笑~~~) cocos2d-x 2.0 只有CCLayer有点击事件处理,需要注册, ...
- 使用SimpleMDE富文本编辑器
1). 安装 SimpleMDE npm install simplemde --save 2). 使用 SimpleMDE 1.打开 src/views/articles/Create.vue 文件 ...
- java命令执行jar文件
如果java -jar target/hbase-demo-1.0-SNAPSHOT.jar HBaseDemo 提示如下 no main manifest attribute, in target/ ...
- 判断Service是否在运行
private boolean isServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(AC ...
- C#写的工厂模式
program.cs file using System; using System.Collections.Generic; using System.Text; namespace Console ...