有很多if else条件是好习惯吗?

时间:2014-03-04 05:33:22

标签: c# asp.net if-statement stringbuilder

在我的一个Web应用程序中,我正在使用代码隐藏的字符串构建器。

StringBuilder str = new StringBuilder();
if (isLogIN != false)
{
    if (isValidUser == true)
    {
        str.Append("<div id='sfBtnSubmitWrapper' >");
        if (CheckIfAlreadyPlayed())
        {                           
            str.Append("<input type='button'");
            str.Append("value='Predict Now' class='sfBtn' id='sfBtnSubmitAnswer' />");                               
        }
        else
        {
            str.Append("<input type='button'");
            str.Append("value='Already participated.' class='sfBtn' id='sfBtnSubmitAnswer' />");
        }
         str.Append("</div>");
    }
    else
    {
        if (CheckEarnedGame())
        {
            str.Append("<div id='sfBtnSubmitWrapper' ><input type='button'");
            str.Append("value='Predict Now' class='sfBtn' id='sfBtnSubmitAnswer' />");
            str.Append("<p style='color:green'>You have reached your daily limit");
            str.Append("but your earned games still remain.</p>");
            str.Append("</div>");
        }
        else
        {
            str.Append("<div id='sfSettingInfo'>");
            str.Append("<a class='ClosePopupImg' id='closeOptionDiv' title='Close'></a>");
            str.Append("<span id='errorLimitmsg'>");
            str.Append("<p style='color:red'>Sorry !!!</br>You have crossed");
            str.Append("your limit of games.</p></span><span id='btnPlayMore'");
            str.Append("class='sfBtn'>Play More");
            str.Append("</span><div id='optionDiv'></div></div>");
        }
    }
}

我在实际代码中使用了更多(如果有的话)条件。我有点混淆是否使用大量if else条件是好的做法还是有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:4)

你所说的是Cyclomatic complexity,而且不是那么好。

每次添加新的if语句时,您都会创建另一条代码可以遵循的路径,从而创建其复杂性。

也就是说,使用if / else语句并不坏,没有它们就无法真正编码。

但是你已经通过查看你的代码已经弄清楚它似乎有点脏了。

那该怎么办?

欢迎使用软件设计和设计模式。

非常常见的设计模式通常可以通过这些code smells,我首先要通过S.O.L.I.D原则来获取基础知识,然后转到DoFactory并阅读所有关于一些常见的模式。

一旦开始这条路径,您就会开始为smells like these.看到example的简单解决方案。

答案 1 :(得分:0)

如果您尝试将“if”下的每个代码块提取到函数中,那么您应该尝试通过抽象委托执行(每个块/函数都是继承自公共接口的类的方法)