我最近遇到了一些场景,其中对代码的微小更改导致跨多个类更改前提条件,我想知道按合同设计是否应该是这种方式。
public Goal getNextGoal() {
return goalStack.pop();
}
如果goalStack.pop()
有堆栈不为空的前提条件,那么是否getNextGoal()
需要显式地具有相同的前提条件?似乎继承先决条件会使事情变得脆弱,而更改为队列或其他结构会将先决条件更改为getNextGoal()
,它是调用者,它是调用者的调用者。但似乎不继承先决条件会隐藏合同,调用者和调用者的调用者不会知道先决条件。
如此脆弱的代码,所有调用者都知道并继承了他们调用的代码的前置条件和后置条件,或者调用者永远不知道更深层次的前置条件和后置条件是什么的神秘代码?