我不是 OO 编程的新手,但我遇到了一个令人费解的情况。我已经得到一个程序来处理和扩展,但是以前的开发人员似乎对 OO 不太满意,他们似乎有 C 背景或对 OO 的理解不清楚。现在,我并不是说我是一个更好的开发人员,我只是认为我可以发现一些常见的 OO 错误。困难的任务是如何修改它们。
就我而言,我看到了很多这样的情况:
if (ret == 1) {
out.print("yadda yadda");
} else if (ret == 2) {
out.print("yadda yadda");
} else if (ret == 3) {
out.print("yadda yadda");
} else if (ret == 0) {
out.print("yadda yadda");
} else if (ret == 5) {
out.print("yadda yadda");
} else if (ret == 6) {
out.print("yadda yadda");
} else if (ret == 7) {
out.print("yadda yadda");
}
ret是一个函数返回的值,在这个函数中所有的Exception都被吞掉了,在catch block 中,显式返回了上面的值。通常,异常会被简单地吞下,并带有空的 catch block 。
很明显,吞下异常是错误的 OO 设计。我的问题涉及返回值的使用。我认为这也是错误的,但是我认为将异常用于控制流同样是错误的,而且我想不出任何东西可以以正确的面向对象的方式替换上述内容。
请问您的意见?
最佳答案
恕我直言,这是两个完全不同的东西:
OO 与非 OO 设计
和
基于异常与基于返回值的设计。
您可以以任何方式组合它们(尽管大多数开发人员会说非 OO 设计仅适用于算法等特殊任务。
关于您的代码库:我建议对整个软件进行整体分析,然后仔细考虑取消返回码是否是个好主意。以后会扩展软件吗?或者它只是某处的一些枯木以完成一项特定任务?
我建议阅读“重构”和“遗留代码”。我周围的人说 Michael Feathers 的“Working Effectively with Legacy Code”是一本非常可靠且值得推荐的书。所以这对您有很大帮助。
祝你好运!
关于java - 如何以OO方式修改返回值设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2583581/