java - 如何以OO方式修改返回值设计?

标签 java oop return-value exception

我不是 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/

相关文章:

java - 在 LWJGL 中快速渲染 20 000 个矩形

java - 如何让矩形在图像中移动?

java - 守护线程阻止 JVM 终止 - 可能的原因?

javascript - 使用 jQuery 返回 AJAX promise 的结果

python - c system() 从 python 脚本返回 - 令人困惑!

java - 删除所有空行

oop - 工厂设计模式和关键字 'new'

c++ - 限制 Light 类实例化

c# - 自动从对象内的其他属性分配属性值

c++ - 关于在 C/C++/Assembly 中返回多个值