快速业务通道

AOP@Work: 设计切入点来避免模式密集 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
igurable s);  public interface IConfigurable {   Iterator getConfigurations();   void configure(Object input);  }  void around(IConfigurable me) : configuring(me) {   Iterator iter = me.getConfigurations();    while (iter.hasNext()){    me.configure(iter.next());     proceed(me);   }  } }

该通知只能用于某些上下文是 IConfigurable 的情况,但是如果能运行, 那么可以运行底层连接点多次。

如何与连接点上的其他测试类型、其他通知、运行该连接点的其他代码交互 呢?对于测试而言,如果测试不是 IConfigurable 的,那么该通知将不运行。这 里没有矛盾。

对于其他通知,假设将 configuring() 定义为 testCase() 并包括其他的 通知,因为这样可以高效地创建很多测试,结果和装置通知都应该有更低的优先 级,以便能够管理和报告不同的配置与结果。此外,配置应该以某种形式包含在 结果收集器用来报告结果的测试标识中;这是那些知道测试可配置、可标识的组 件的职责(下面一节还将进一步讨论这些组件)。

对于运行连接点的代码,与通常的 around 通知不同的是,它对每个配置都 调用 proceed(..) 一次,因此底层连接点可运行多次。在这里通知应该返回什么 结果呢?与结果处理通知一样,我惟一能确定的是 void,因此,我限制该通知返 回 void,并把这个问题交给编写切入点的测试开发人员。

各取所需

假设我是一位装置开发人员,需要调整来适应新的测试,如果必须在测试类中 实现 IConfigurable,那么 看起来似乎不得不增加测试的“模式密集”。为了避 免这种情况,可以在 AspectJ 中声明其他类型的成员或者父类,包括接口的默认 实现,只要所有定义保持二进制兼容即可。使用内部类型声明增加了通知的类型 安全,从而更容易避免从 Object 的向下类型转换。

是不是像其他成员那样增加了目标类型的复杂性呢?其他类型的公共成员声明 是可见的,因此在理论上可能增加目标类型的复杂性。但是,也可以将这些成员 声明为某个方面私有的其他类型,因此,只有这个方面才能使用它们。这样就可 以装配组合对象,而不会造成把所有成员在类中声明可能造成的一般冲突和交互 。

AOP@Work: 设计切入点来避免模式密集(11)

时间:2011-09-04 IBM Wes Isberg

下面的代码给出了一个例子,用 init(String) 方法使 Run 适应于 IConfigurable:

public class Run { public void walk() { ... } public void init(String arg) { ... } } public aspect RunConfiguration extends Configuration { protected pointcut configuring (IConfigurable s) : execution(void Run+.walk()) && target(s); declare parents : Run implements IConfigurable; /** Implement IConfigurable.getConfigurations() */ public Iterator Run.getConfigurations() { Object[] configs = mockConfigurations (); return Arrays.asList(configs).iterator(); } /** Implement IConfigurable.configure(Object next) */ public void Run.configure(Object config) { // hmm - downcast from mockConfigurations() element String[] inputs = (String[]) config; for (String input: inputs) { init(input); } } static String[][] mockConfigurations() { return new String[][] { {"one", "two"}, {"three", "four"}}; } }

测试标识符

测试标识符可由结果报告、选择或配置以及底层的测试本身共享。在一些系统 中,只需要告诉用户哪些测试正在运行即可;在另外一些系统中,需要一个惟一 的、一致的键来说明那些失败的测试获得通过(bug 修正),哪些通过的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号