我正在研究 Java 库的契约(Contract)设计,这是我迄今为止在界面方面提出的想法。
用户可以调用executeContract,并且executeContract在调用“require”后调用invokeContract。 Ensure 在executeContract之后调用,以确保invokeContract返回的正确性。
此代码还可以用作回调方法(匿名内部类调用)。
你有什么想法?这是按契约(Contract)设计的吗?到目前为止,这有助于我编写可测试的 Java 代码。
public interface IContractHandler {
/**
* Execute contract will invoke the #invokeContract method. In the execute method,
* check for the validity of the preconditions and the post conditions.
*
* The precondition can be null.
*
* @param precondInput - Precondition Input Data, can be null.
* @return Post condition output
*/
public Object executeContract(final Object precondInput) throws ContractError;
/**
* Require that the preconditions are met.
*/
public Object require(final Object precondInput) throws ContractError;
/**
* Ensure that the postconditions are met.
*/
public Object ensure(final Object precondInput) throws ContractError;
/**
* The precondition can be null if the contract allows for that.
*
* @param precondInput - Precondition Input Data, can be null.
* @return Post condition output
*/
public Object invokeContract(final Object precondInput) throws ContractError;
}
最佳答案
如果您正在寻找通用解决方案,我会推荐 Java Modelling Language 。所有前置/后置条件 (@requires/@ensures
) 都可以在您要检查的方法上方的注释中指定。据我了解,JML 编译器 (jmlc
) 将运行时断言插入字节码中。
我相信 ESC/Java2 具有类似的功能,但我以前从未使用过它。
关于java - 按契约(Contract)库(界面)设计的想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654737/