|
盒子资源分类 |
|
|
|
|
Delphi AOP(Aspect Oriented Programming) Frame - MeAOP v0.5 |
|
关键字:DelphiAOP Featrure Aspect Oriented Programming MeAOP 代码注入 |
来 自:原创 |
平 台:Win9x,Win2k/XP/NT,Win2003 |
下载所需:0 火柴 |
深浅度:高级 |
完成时间:2006/5/14 |
发布者:riceball |
发布时间:2006/5/14 |
编辑器:D7/D10 |
语 种:简体中文 |
分 类:对象 |
下载浏览:1319/16174 |
|
|
|
|
== 面向方面编程思想简介 == 面向方面编程,正确的理解应该说是面向功能的一种编程方法。它作为对象建模的辅助,目的就是为了重用功能: 1、将通用功能从不相关类之中分离出来; 2、能够使得很多类共享一个功能,一旦功能发生变化,不必修改很多类,只要修改这个功能就可以了。
因此,我认为老外的定义并不妥当,故,我这里将其称之为 Feature 而不是 Aspect,也许说成是 Featrure Oriented Programming 更为恰当。
在我看来,它实现的核心思想就是对类(对象)的方法的拦劫和注入。
我的 AOP For Delphi Frame 是基于代码注入,核心也就是黑客的技能,对原始代码进行注入替换——通过对过程方法注入代码完成对方法的拦截处理!我对基于动态代理(对对象类进行包裹)的AOP形式不敢兴趣,这样性能太低,而代码注入则是速度最快的解决方案,内存开销也比动态代理小多了。
我希望我的AOP架构简单高效并且易于使用。随便提一句,我把我的AOP叫做MeAOP.
在MeAOP中,你不必去想什么joint, advise, cross-cut 等等莫名的概念。你只需要知道功能这个概念, MeAOP的核心就是抽象出了定制功能类,你所做的开发就是围绕开发自己特有的功能类展开的。 你只要简单的调用 TMeCustomFeature 的类函数 AddTo 就可以将功能添加到你指定的类的方法上。 eg, <code> TMyFeature.AddTo(aClass, @aClass.aMethod, 'aMethod'). </code>
那么如何设计自己的功能类呢? 很简单,只需要在你的功能类中重载你需要拦截的位置的方法即可,如:BeforeExecute, AfterExecute 等等。 你的所有的功能类都应该从 TMeCustomFeature 派生.
注意:[Ver0.5] 现目前版本我只是实现了对于无参数的过程和方法(不包括有返回值函数)的支持。
<code> TMyFeature = class(TMeCustomFeature) protected {: 仅当返回为真才执行拦截的方法 MethodItem } { 如果你没有重载,它总是返回真.} function AllowExecute(Sender: TObject; MethodItem: TMeInterceptedMethodItem): Boolean;override; {: 在MethodItem被执行前被触发,发生在AllowExecute返回为真后 } procedure BeforeExecute(Sender: TObject; MethodItem: TMeInterceptedMethodItem);override; {: 在MethodItem被执行后被触发(即使MethodItem引发了异常也依然会被触发) } procedure AfterExecute(Sender: TObject; MethodItem: TMeInterceptedMethodItem);override; {: 执行MethodItem的过程中引发了异常后被触发。} procedure AfterException(Sender: TObject; MethodItem: TMeInterceptedMethodItem; E: Exception);override; end; </code>
=== MeAOP 架构 === 我的AOP 架构大致分为三层: 1.底层核心:过程方法注入器: 提供最简单最轻巧的注入器(一个注入器大约仅占内存36个字节) 2.中层核心:则是过程方法拦截器 2.1. 只支持无参数的过程方法拦截器 2.2. 支持带参数的过程方法拦截器 3.上层核心:提供面向功能的编程类库,最终实现能够将很容易将新的功能附加到指定类的方法上。 |
|
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们! |
相关文章 |
|
|
|
相关评论 |
|
|
|
|