用AOP增强契约:用AspectJ为Java软件开发加入契约式设计 - 编程入门网
new ContractBrokeException("POSTCONDITION ERROR: " +
" Return value of getCustomer shouldn''t be null");
}
}
/**
* Check invariants
*/
public void checkInvariants(Object thisObject) throws ContractBrokeException
{
//invariants check
}
}
用AOP增强契约:用AspectJ为Java软件开发加入契约式设计(7)时间:2011-09-07 ibm Filippo Diotalevi清单 4 中的 CompanySystemContractManager类只检查参数或者返回值是否 为 nulll,但是可以使其增强为加入特别复杂的检查。 要注意的重要一点:每一个契约检查实例化一个 CompanySystemContractManager对象,因此可以通过在第一个不变量检查期间将 数据存储到私有字段中,并在执行完 CRM 系统调用后验证它们有没有改变,来 检查不变量。 恭喜!您已经开发了应用程序与 CRM 系统之间的一个简单的契约。在用 AspectJ 编译器编译这个应用程序后,这个契约将应用到对 CompanySystem类的 getCustomer方法的每一次调用上,并检查应用程序与它之间的交互的一致性。 而且,如果 CompanySystemContractManager足够一般化,就可以重复使用它, 只需要重新定义 targetPointcut就可以将它用于其他的契约检查。 这个示例解决方案完全满足我在本文开始时列出的四项要求: 它是 透明的,因为业务逻辑代码不包含对契约检查的引用,前者绝对不知道 后者。 它是 可重用的,因为它依赖于一个简单的基础设(一个接口和一个抽象方面 ),并使您可以在多种情况下重复使用一个 ContractManager。 它是 灵活的,因为可以使用 AspectJ 编译器帮助选择使用哪些方面,从而 选择要检查哪些契约。 它是 简单的,因为它只由几个类组成。 结束语 本文描述了在使用 AspectJ 和 AOP 进行 Java 应用程序开发时采用契约式 设计的可能方式。建议的解决方案保证了干净而灵活的解决方案,因为它使用一 个特别简单且很好地模块化的设计,使您可以将契约与业务逻辑分开编写并声明 式地应用它们。 本文配套源码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |