Function 函数返回值或整数状态代码重构

Function 函数返回值或整数状态代码重构,function,refactoring,Function,Refactoring,我正在处理几个带有某种代码味道的函数: public function example($a, $b, $c) { $something = doSomething($a); $more = doMoreStuff($b,$c); $evenMore = doEvenMoreStuff($a,$c); if(!$something) { //error code because blablabla return 1; }

我正在处理几个带有某种代码味道的函数:

public function example($a, $b, $c) {
    $something = doSomething($a);
    $more = doMoreStuff($b,$c);
    $evenMore = doEvenMoreStuff($a,$c);

    if(!$something) {
        //error code because blablabla
        return 1;
    }

    if(!$something and $more == "whatever") {
        //another different error because blebleble
        return 2;
    }

    if(!$more) {
        //this means another error because bliblibli
        return 3;
    }

    if(!$evenMore) {
        //yep, error, returning code error 4
        return 4;
    }

    //etc...

    //if no errors
    return $something + $more + $evenMore;
}
我应该如何处理这些错误代码?我想创建一个具有常量值的类,如下所示:

class ExampleError {

    const BLABLABLA = 1;
    const BLEBLEBLE = 2;
    const BLIBLIBLI = 3;
    const BLOBLOBLO = 4;
}
然后重构函数更改行,如

返回1

返回ExampleError::BLABLABLA


试图让它更具可读性。有更好的解决方案吗?

这取决于应用程序的其余部分是如何编写的,取决于您所称的“错误”是真正的错误,还是可预测的合法边缘情况

第一种代码气味是“神奇的数字”;是,用符号常量替换它们

第二种代码味道是返回的签名不是“干净的”——返回错误代码或结果集。在这样做的过程中,您需要调用代码来理解代码的语义——它需要知道bla是连接到数据库的一个不可恢复的错误,bleble表示您在某个地方违反了某些约束

您的问题表明您的代码在生成结果时可能会遇到错误;“最干净”的方法是使用异常来指示错误。异常具有内置语义或指示出错原因,可以“包装”并向上传播调用堆栈。因此,如果
blabla
表示您无法连接到数据库,那么调用函数的方法可以将其传递回UI,而UI不必知道
blabla
表示“无法连接到数据库”

当然,异常处理也会变得混乱,并且会降低代码的可读性,因此您确实希望仅将其用于处理错误,而不是边缘情况

编辑

(我假设您使用的是PHP,因此我们制作了特定于该语言的链接)

缺少ID字段
听起来像是经典之作-调用此方法的代码使用了无效参数。您的函数不能期望优雅地处理此问题,因此这是一个合法的例外

更新数据时出现问题
听起来像是数据库异常-您运行了一条SQL语句,但返回了一条错误消息。您的方法无法实现其承诺的功能,并且没有明显的恢复方法。可能是


无效状态
-可能是另一个无效参数,或者可能是某种逻辑问题。同样,您的函数无法处理此问题,并且这不是函数正常运行方式的边缘情况。

mmm,错误如
缺少id字段
更新数据时出现问题
无效状态
,。。。(它们是边缘案例吗?),谢谢“神奇数字”这个词谢谢内维尔,我真的很感谢你的嘲弄