posts - 176, comments - 240, trackbacks - 0, articles - 7

AOP之动态化

Posted on 2007-01-14 17:04 canonical 阅读(1072) 评论(2)  编辑  收藏 所属分类: 设计理论
    目前的AOP(Aspect Oriented Programming)技术虽然以动态代码织入为核心,但是这种织入仍然是一次性的。一般在系统构造的时候(例如ClassLoader装载Class的时候)实现类和成员函数的增强。此后在运行时刻代码结构是固定的而不再发生变化。但是在真正的业务处理过程中,我们在不同的应用场景下可能要求织入不同的Aspect。例如基本的权限Aspect, 如果在不同的应用场景有不同的权限设定,则我们显然希望进入一个确定的操作场景的时候就指定一整套的权限策略,而不是在每个函数调用时刻写上一大堆的if/else(这种分离的条件判断正是AOP试图从结构上消除的)。
    为了实现AOP的二级动态化,我们首先需要约定一些公共标记(坐标),便于在标记处插入Aspect Container, 其次我们需要在系统中建立一个隐蔽的信道,可以通过该信道传递一个标志符(Aspect的id),用于在各处选择特定的Aspect. 建立这种动态特性之后,我们就可以据此发展出Aspect组的概念,并实现Aspect组之间的继承关系等高阶结构,从而最大限度的限制程序结构的分散化。
    Witrix平台的BizFlow设计在概念上可以看作是AOP的一种二级动态化织入设计,它通过$bizId这一特定参数来选择织入的Biz。一个BizFlow对象是一组Biz(Aspect)的集合, BizFlow可以通过extends机制实现集合之间的合并等(BizFlow实现的合并策略其实是非常复杂的)。一个简单的应用就是流程支持,例如一个普通的实体对象对应的bizflow只需要加上如下代码即可获得流程相关的代码,前台菜单等。
  <bizflow extends="testflow.biz.xml">

Feedback

# re: AOP之动态化  回复  更多评论   

2007-08-18 04:56 by ObjectTutor
我觉得这个只是概念罢了
没有业务的规范和统一,哪有组件、AOP开发?
但实际上商业业务本来就很复杂,做规范统一需要很长实践
技术只是辅助罢了

# re: AOP之动态化  回复  更多评论   

2007-08-18 20:15 by canonical
在数学和具体工艺之间还存在着所谓的物理学,这就是Witrix设计的方向。

只有注册用户登录后才能发表评论。


网站导航: