簡體   English   中英

如何重構 string.contains 邏輯

[英]how to refactor string.contains logic

我繼承了一些乍一看聞起來很有趣的代碼,但也許我正在閱讀它......在審查代碼時,我遇到了以下問題,並記下考慮重構邏輯,因為我發現它難以閱讀且易於使用到錯誤。

if (somestring.Contains("some value")
    result.add(specificString)
if (somestring.Contains("some other value")
    result.add(anotherSpecificString)
if (...)

... 100 行...

我的問題是:

  1. 圖案正常嗎? 至少,我覺得這應該簡化為一種接受可能值及其替換的方法,而不是重復的 if 邏輯?

  2. “斷點”在哪里——我的意思是,在重構之前,有多少 if.. 檢查沒問題?

  3. 還有哪些重構可以很好地匹配這種模式?

我對以某種方式使用模式匹配有一些模糊的早期想法,但這似乎不適合這里?

最終,我想我需要退后一大步,回來客觀地看待這個......

我建議提取一個模型,例如

 // Model: when "find" is found we should add "add" to result
 static List<(string find, string add)> m_ToAdd = 
   new List<(string find, string add)>() {
     ("some value", specificString),
     ("some other value", anotherSpecificString),
      //TODO: Add more pairs here 
 }; 

那么你可以把它作為一個簡單的循環:

foreach (var pair in m_ToAdd)
  if (somestring.Contains(pair.find))
    result.add(pair.add); 

答案:

  • 一季度。 (現有)模式是否正常?

  • A1. 如果您不打算添加/刪除if s 並且您幾乎沒有if s,則可以容忍

  • Q2。 “斷點”在哪里——我的意思是,在最好重構之前,有多少if .. 檢查沒問題?

  • A2。 我的經驗法則是 4-5 if s。

  • Q3。 還有哪些重構可以很好地匹配這種模式?

  • A3. 模型提取:您將數據(這里是List<(string find, syting add)> )和邏輯foreach循環)分開。

暫無
暫無

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

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