买了一本关于AOP方面的书,也看了好些天了。有些收获,谈谈吧,好像是这个blog的第一篇技术性文章了。
第一次接触面向方面编程,大概在两年前。那可是真正的接触啊,只知道了这个名字和一些名词,什么关注点啊,横切啊,组合过滤器等等,其他的就不是很清楚了。近几天看了一些关于AOP的文章,发现对AOP的思想有了一些认识,加上今天加班挺累,还没吃饭,所以有必要纪念一下。
我觉得首先要理解的一个问题是,为什么要面向方面。这个涉及到关注点分离的问题。在经典的面向对象程序设计中,使用了类继承的方法来进行关注点的分离,这是一大进步,但是似乎还不够。
之所以说“似乎”,是因为我认为,在关注点的分离这一方面,面向对象也可以做到面向方面,只是代价比较大,要求比较高而已,这点我后面再说(不知这样的看法是否完全正确,欢迎和我讨论啊)。
经典的面向对象编程中的类继承的关注点分离办法,事实上实现了一种一维的分离。比如说一个customer类,其所关注的,就是一个顾客的一些事情。这样的缺点是这个customer需要和其他的类进行交互的时候,就来的非常麻烦和缺乏灵活性,比如它需要与log类进行交互,需要对自身进行很多的修改,如果需要加入持久化功能,也需要对code进行比较大的改动(这种称为“入侵式的改动”)。
面向方面的一个目的是,希望能够在语言层面提供对N维关注点的分离方式,伴随的就是提供能够接受的非入侵式的改动能力。有个说法是人同时只能关注七件事情,所以面向方面的方向就是要减少人同时需要关注的事情,每次只对一个关注方面,最后再对各个方面进行组合。
上面我说面向对象也可以有代价地实现这种关注点的分离,比如说以小粒度组件以及他们的库的形式来对方面进行模拟。只要粒度够小,加以组合,多维终究也是可以用一维的方式来表达的。这样的方式的一个不足就是就是他们并不能阻止你去考虑别的方面。灵活性上,需要看借助什么语言实现了,要是加上范型和反射,估计...就太容易出乱子了,sigh~
其实从面向对象的单一职责的观点来看,AO只不过是OO的一种合理延伸而已。正如AspectJ也只是在Java上套了一个pre-pre-processor而已。
嗯,先写这么多,等有了积累再写~呵呵。
两百年前 means long long time ago...
2006/09/28
我看AOP
at
7:34 下午
Labels: Technology
订阅:
博文评论 (Atom)
3 条评论:
太技术了,太生猛了,看不懂哦
下次多写几首诗吧
把A换成M我就认识了
MOP。。。。嗯那
今天才知道这个blog要点开才能看到评论
要点开就可以评论。。。
怪不得毛毛说要把它做成点击察看更多的呢
在小梅的指导下第二次看到了评论栏。汗死
发表评论