Posted on 2005-11-14 15:37
canonical 阅读(315)
评论(0) 编辑 收藏 所属分类:
软件开发
AOP(Aspect Oriented Programming)与DSL(Domain Specific Language)其实并不是相互冲突的概念。但在AOP社区流传过一种说法,认为AOP的出现使得DSL成为不必要的技术,也反对制造基于不同领域知识的特殊的DSL方言。从某种程度上说,这种说法有一定的道理。DSL的核心观念是在比较高的抽象层次上来描述问题并处理问题。除了抽象领域概念之外, DSL最关键的就是抽象出问题领域中的结构,并对他们进行有效的描述和控制。但是DSL本身并没有提供什么一致的方法来规范这种抽象的结果,因而最终对于同一问题我们可能得到很多种DSL解决方案。另外发明一种语言往往意味着连带提出一整套环境假设和规则约定,一般很难针对特殊情况进行局部修正,一旦初始设计出现问题,往往很难修正。结果,设计DSL目前还只能是少数人的专利。
与DSL相比,AOP是个相对简单的概念。抽象的说,它实现系统的一种行为切片(behavior slice),可以看作是修饰语与动作之间的正交分解。而从基本的结构含义上说,AOP的目标没有DSL那么大,它解决的是程序中最简单的一个结构问题:定位到一段语句,在其前方和后方分别插入一段代码,并对其进行维护。AOP是对OOP(Object Oriented)最直接的也是最重要的一种补充,虽然它比DSL的概念要简单许多,但在具体的操作方法上也要明确许多。我们程序中最常见的结构问题都可以在AOP的框架下得到解决,因而大大削弱了在这些方面对于DSL的需求。
但是AOP的有效性并不意味着它将取代DSL,事实上AOP关注的重点仍然是程序领域,它所解决是线性结构(程序代码)的交织问题,而DSL所关注的是结构更加复杂丰富的业务领域。随着应用的深入,DSL将大有所为。