gpt4 book ai didi

java - 按契约(Contract)库(界面)设计的想法?

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:43 26 4
gpt4 key购买 nike

我正在研究 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/

26 4 0
文章推荐: java - 使用 标记的 Java Applet 中的 ClassNotFoundException