这是我的代码:
deleteStuffFromDb(); // void method
deleteStuffFromCache();
deleteStuffFromDb()是一个返回类型为void
的接口方法。
理想情况下,第一种方法会返回一个值(成功/失败)。此返回值将确定第二个方法是否执行。
我可以修改界面,因为它被2个类调用。然而,作为一个没有全面了解系统的O& M开发人员,我仍然有可能破坏某些东西。
你如何建议我确定这个void deleteStuffFromDb()的执行是否决定了deleteStuffFromCache()的执行。
以下是我认为的一些方法:
请将您的想法和理由告诉我。
感谢。
答案 0 :(得分:2)
我可以修改界面,因为它被2个类调用。 但是,作为一个没有开发人员的O& M开发人员,仍有风险 系统的全貌
如果系统的全貌是它只在两个地方使用,你当然应该改变它们。完整的重新编译和系统测试将揭示是否有任何其他因素被破坏。
答案 1 :(得分:1)
将deleteStuffFromDb()
的签名重写为deleteStuffFromDb(Object returnObject)
然后编写一个包装器接口来替换旧签名deleteStuffFromDb()
在包装器界面中,执行:
void deleteStuffFromDb() {
// initialize some dummy returnObject that doesnt get used
deleteStuffFromDb(dummyObject);
}
要使用此系统,请将returnObject
传递给界面以捕获返回值。
这样,您可以根据需要从界面中获取返回值,但不会破坏使用旧界面的现有调用。
答案 2 :(得分:0)
我认为将返回类型从void更改为其他内容会破坏任何现有代码。
如果返回类型为void,那么使用它的任何代码都不会期望从该方法返回任何内容。如果确实如此,那么它也会破裂。
现在,如果你更改它并从方法返回一些值,那么在现有代码的情况下,返回的值将被忽略。
您不能使用void方法,该方法应该返回某个值,但您可以反过来。
我能想到的唯一情况是,如果有很多该接口的实现,那么改变它可能是一个问题。
就第二点而言,我更愿意将逻辑保留在它所属的位置。可能只是调用方法本身。
答案 3 :(得分:0)
不确定这听起来有多好,但我已经看到了这些方法(例如Scanner.html#next()
根据失败原因抛出NoSuchElementException
和IllegalStateException
。还有更多这样的例子) ,这是为了在失败的情况下成功抛出异常,例如
public void deleteStuffFromDb(){
..... usual code..
if (failedCondition){
throw new RuntimeErrorException(new Error("Couldn't delete"));
}
}
在来电方面,如果你得到抛出的异常,你可以假设,这是一个失败,否则成功。这样就可以避免更改界面。