2016-10-28 77 views
0

我根據用戶從命令行輸入來填充對象。 對象需要有一定數量的數據才能繼續。到目前爲止,我的解決方案是嵌套if語句來檢查對象是否準備就緒。像下面的例子。 也許3個if語句不是很差(?),但如果這個if語句的數量開始增加呢?我在這裏有什麼選擇?假設X,Y和Z是三個完全不同的東西。例如,假設object.X是一個整數和對象列表.Y是一個字符串,也許Z是某種布爾值,只有當object.Y具有一定數量的值時才返回true。 我不確定polymorhism會在這種情況下工作嗎?從命令行填充對象並檢查對象狀態

do 
    { 
     if (object.HasX) 
     { 
      if (object.HasY) 
      { 
       if (object.HasZ) 
       { 
        //Object is ready to proceed. 
       } 
       else 
       { 
        //Object is missing Z. Handle it... 
       } 
      } 
      else 
      { 
       //Object is missing Y. Handle it... 
      } 
     } 
     else 
     { 
      //Object is missing X. Handle it... 
     } 
} while (!String.IsNullOrEmpty(line)); 
+1

您可能想了解「單層抽象」原理。除此之外:if/else這樣的級聯是通向問題的明確之路。你應該認真思考尋找其他解決方案。 – GhostCat

回答

1

對於複雜邏輯的工作流程,我發現,可維護性決定的邏輯應該生活在其中的抽象級別。

將新的邏輯/解析規則必須定期補充很重要?

不幸的是,沒有辦法避免必須做顯式條件,他們必須住在某個地方。

一些東西,可以幫助保持它的清潔可能是:

  • 主要功能是隻用於轉換命令行參數,以原生類型負責,那麼這必將推動邏輯下一個對象生成器類,這將保持主要功能穩定且不變,除了添加標誌描述之外,TH應該將邏輯保持在域外,並且集中到構建器抽象
  • 主要功能是負責解析和配置域,它隔離了所有混亂的條件主/解析功能並將邏輯保留在域模型之外
  • 展開邏輯,if not object.hasX; return,下一步您知道has.X,這將仍然有一個條件列表,但會更平坦
  • 創建DSL聲明性規則語言(展平時更明顯)。這可能是一個規則處理器,邏輯處於活動狀態,然後外部主函數可以定義進行必要的狀態