簡體   English   中英

帶有 switch 的 case 語句 - case 或 if-else - 最佳設計?

[英]case statements with switch - case or if-else - best design?

我試圖用一個例子來解釋我的設計問題。

假設我有 5 個父母 [1,2,3,4,5]。 每個父母有n個孩子。 兒童就像 [a,b,c,d,e,f]。

我正在嘗試寫一些東西

 Map<String, String> children = parentDataHolder.getParent(parentType).getChildren();
 switch(parentType){
      case 1:
          if(partent1.contains(childType1)){
          }
          //Similarly for all child types
      case 2:
      case 3:
         .......
 }

在這里,父類型是固定的。 子類型是動態的。 我正在進入地圖。 對於每張地圖,我都必須檢查孩子是否存在。 如果是這樣,我必須根據孩子類型采取行動。

哪種設計會更好? 以上設計不適合我。

有任何想法嗎?

編輯:

parentHolder 是一個對象,它具有獲取父類型和子類型的方法。 例如:

 {
     parentType: '1',
     children:{
       "a":"fileOne.xml",
       "c" : "fileTwo.gz"
     }
  }

收到此 json 后,我將子值存儲在Map ,然后獲取 parentType 並傳遞給 switch 條件。

在 switch 案例中,我必須為孩子們應用邏輯。 上面的例子有兩個孩子。 在其他一些情況下,parentType 1 會將 a,b,c 作為子項。 所以它應該是通用的。

作為指南switchif-else語句更好,因為它更具可讀性。

如果我們在初始需求分析期間或隨着需求變更的到來發現添加了新案例,則應確定變更軸,並且應避免這兩種情況(如果其他和切換)。

在這種情況下,我們需要尊重open close principle Swich case 語句不僅不好,因為 ocp 被破壞了,而且容易出錯,如果我們錯過在某個地方添加一個新的 case,那么可能會出現問題。

在這種情況下,必須通過抽象來處理案例(嘗試通過抽象可以更改的內容來保護自己免受更改)。

您可以為這種情況定義一個(抽象的)父類,並且每個情況都可以映射到一個單獨的子類。 假設我們有一個 case x : // contents;。 內容可以放在我們可以在父類中擁有的抽象方法的實現中。 如果我們添加了一個新案例,我們可以輕松定義一個新類並提供實現。 客戶端代碼應僅依賴於抽象父類,並且可以在運行時注入具體類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM