2014-03-04 35 views
2

在我的一個Web應用程序中,我使用了代碼後面的字符串生成器。是否有良好的做法有很多if else條件?

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>"); 
     } 
    } 
} 

還有更多(如果其他人)的條件,我用我的實際code.I感到有點迷惑無論是使用大量的if else條件好的做法或有任何其他的方式做它。

+0

過寬下,以提取每個代碼塊我。 – Sadique

+0

@Acme除了上述之外,你能否以其他方式暗示我? –

+0

您尚未指定您的要求。你只問過很多'if-else'是好還是壞,並且沒有人回答它。你的代碼雖然對我來說似乎沒問題。 – Sadique

回答

4

你說什麼是Cyclomatic complexity,沒有它不是很大。

你添加一個新的if語句您essencially創建你的代碼可以遵循,因此其複雜性的另一個路徑每次。

這就是說,它不是不好用if/else語句,你真的不能沒有他們的代碼。

但是,正如你已經看你的代碼想通了,似乎有點髒。

所以,我們要做什麼呢?

歡迎使用軟件設計和設計模式。

非常常見的設計模式往往能在這些各種各樣的code smells,我會通過經歷的S.O.L.I.D原則,以獲得基本知識,然後頭向DoFactory和閱讀所有關於一些常用的模式開始。

一旦你開始沿着這條道路,你會看到一個簡單的解決方案,爲smells like these.example

0

如果你嘗試「如果」到功能則應嘗試委派通過抽象的執行(每塊/功能將是類的方法,該方法從公共接口繼承)