面向对象设计与面向方面

面向对象编程毫无疑问是当今的主流编程模式。在设计系统时,我们会将系统分解成组件,并将组件映射成类型。类型包含了数据并给出行为,类型也能以多态的方式重用,即使遵守了所有面向对象设计的正面规范,面向对象编程仍旧称不上完美。

面向对象理念擅长于将系统分解成组件并且用组件来描述流程,也擅长于处理组件的关注点。不过对于那些Cross-cutting(横切)的关注点,面向对象理念却不在行。横切关注点是指会影响系统中多个组件的关注点,例如:日志、安全模块和异常处理等。这些模块并不是一类组件的专门职责,而是可以看做系统的一个方面(Aspect),处理这些关注点必须用一个不同的、超越应用层次所有类型的逻辑层次来专门处理。这就是另外一种编程理念:面向方面编程(Aspect-oriented Programming,AOP)。

AOP的概念由Xerox PARC实验室于20世纪90年代提出,同时也发明了第一种AOP语言-----AspectJ.

AOP的一些核心概念:

1. 横切关注点:书上的原话就不说了,举个例子大家就明白了,在一套系统中,日志模块是必不可少的,系统的核心模块外部依赖于日志模块,这就是一个模切的关注点。对于像日志模块,异常处理模块等,可以将其封装至一个新的组件中,该组件就叫做一个"方面(Aspect)"。方面是一个可重用的组件,其中封装了项目中多个类型需要使用的同一个行为。

2. 处理方面:面向对象场景中,项目是一系列源文件组成的,每个源文件实现了一个或多个类型,包括那些表示横切关注点的类型。这些类型由编译器进行编译,生成可执行文件。而在AOP场景中,方面并不直接由编译器处理。方面首先通过某种方式合并到常规的源代码中,然后由编译器进行编译。

你可能感兴趣的:(面向对象)