如何重构顺序ifs?

时间:2011-09-05 08:39:46

标签: c# refactoring

我写了这段代码。这真的很难看。我想重构一下。我必须返回object[]。我在考虑使用bool值来检查我是否必须继续调用其他方法,并且最后创建object[]

private object[] TrasferisciSingoloFile(some parameters...)
{
    Result result = new Result;

    result = FTPRename(some parameters...);
    if (result.error)
    {
        result.SetError("Some Problem 1");
        object tip = new object[] { par as ThreadCounterManager, result };
        return (object[])tip;
    }

    result = FTPDownloadAndCopy(some parameters...);
    if (result.error)
    {
        result.SetError("Some Problem 2");
        object tip = new object[] { par as ThreadCounterManager, result };
        return (object[])tip;
    }

    result = FTPMove(some parameters...);
    if (result.error)
    {
        result.SetError("Some Problem 3");
        object tip = new object[] { par as ThreadCounterManager, result };
        return (object[])tip;
    }

    result = FTPDelete(some parameters...);
    if (result.error)
    {
        result.SetError("Some Problem 4");
        object tip = new object[] { par as ThreadCounterManager, result };
        return (object[])tip;
    }

    object tip1 = new object[] { par as ThreadCounterManager, result };

    return (object[])tip1;
}

3 个答案:

答案 0 :(得分:6)

让FTPXXXX套件的所有功能在发现错误时抛出异常,因此您可以在catch(){}块中捕获并返回错误一次。 “某些问题xxxx消息”可以使用您在提出异常时提供的消息进行修饰。

答案 1 :(得分:1)

假设您的FTP函数在代码中的其他位置,请考虑让它们抛出异常,并在此函数中使用try / catch子句。

Result result = new Result();
try
{
    result = FTPRename(some parameters...);
    result = FTPDownloadAndCopy(some parameters...);
    result = FTPMove(some parameters...);
    result = FTPDelete(some parameters...);
}
catch (SomeException e)
{
    return (object[])new object[] { par as ThreadCounterManager, result.SetError(e.Message) };
}

return return (object[])new object[] { par as ThreadCounterManager, result };

答案 2 :(得分:1)

如果您可以修改FTP方法,您可以让它们自己分配错误消息,并创建一个帮助方法来创建提示对象。这样,除了检查是否发生错误之外,您不需要关心任何事情。

类似

private Object[] makeTip(arg1, arg2) {
    return Object[] {arg1, arg2};

}

Result result = new Result;

result = FTPRename(some parameters...);
if(result.error)
    return makeTip(par as ThreadCounterManager, result);

result = FTPDownloadAndCopy(some parameters...);
if(result.error)
    return makeTip(par as ThreadCounterManager, result);
...
return makeTip(par as ThreadCounterManager, result);