在我的一个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条件是好的做法还是有其他方法可以做到这一点。
答案 0 :(得分:4)
你所说的是Cyclomatic complexity,而且不是那么好。
每次添加新的if语句时,您都会创建另一条代码可以遵循的路径,从而创建其复杂性。
也就是说,使用if / else语句并不坏,没有它们就无法真正编码。
但是你已经通过查看你的代码已经弄清楚它似乎有点脏了。
那该怎么办?
欢迎使用软件设计和设计模式。
非常常见的设计模式通常可以通过这些code smells,我首先要通过S.O.L.I.D原则来获取基础知识,然后转到DoFactory并阅读所有关于一些常见的模式。
一旦开始这条路径,您就会开始为smells like these.看到example的简单解决方案。
答案 1 :(得分:0)
如果您尝试将“if”下的每个代码块提取到函数中,那么您应该尝试通过抽象委托执行(每个块/函数都是继承自公共接口的类的方法)