摆脱if-else并切换到c ++

时间:2013-06-27 09:24:24

标签: c++ oop design-patterns

我有这些很长的if - else / switch语句,真的很长,并且它们使代码难以阅读。所以只是想知道有没有办法摆脱它们?也许就像为每个条件使用一个类然后使用责任链模式?

你会建议采用什么方法?

以下是示例代码:

    if (  cc == LIB_DEFINED_CONSTANT_1  )
    {

        response = "-1";

        errorWindow->setText ( "The operation timed out.\nPlease try again later." );
        errorWindow->show (  );

    }   

    else if (  cc == LIB_DEFINED_CONSTANT_2  )
    {

        response = "-1";

        errorWindow->setText ( "Couldn't conect to the server.\nPlease try again later." );
        errorWindow->show (  );

    }

    else if (  cc == LIB_DEFINED_CONSTANT_3  )
    {

        response = "-1";

        errorWindow->setText ( "Access is denied.\nPlease contact our support team." );
        errorWindow->show (  );

    }

    else if (  cc == LIB_DEFINED_CONSTANT_4  )
    {

        response = "-1";

        errorWindow->setText ( "Credentials and varified\nPlease contact our support team." );
        errorWindow->show (  );

    }
    else if ....

正如您所看到的,除了为errorWindow设置文本外,条件标记中的大多数代码都是类似的。

编辑: 如果人们可以对他们投票的原因发表评论,那就太好了。

1 个答案:

答案 0 :(得分:2)

通常,您应该尝试将代码拆分为小函数/方法,并且每个函数/方法都应该完成一件事。如果你有一个很长的(几页)if / else阻止,你应该重构你的代码

我认为代码应该是这样的:

if (shouldIdoThing1()) 
{
  doThingOne(withThis, andThis, andThat);
}
else if (shouldIdoThing2())
{
  doTheSecondThing(withThisOnly);
} 
else
{
  doTheOtherThing(withSomethingElseEntirelyPerhaps);
}

并且,如果可能的话,我尝试使我的代码看起来像那样。在大型应用程序中滚动浏览几个页面只是为了检查else中的操作是一个真正的痛苦......一个人的头脑。