[英]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 行...
我的問題是:
圖案正常嗎? 至少,我覺得這應該簡化為一種接受可能值及其替換的方法,而不是重復的 if 邏輯?
“斷點”在哪里——我的意思是,在重構之前,有多少 if.. 檢查沒問題?
還有哪些重構可以很好地匹配這種模式?
我對以某種方式使用模式匹配有一些模糊的早期想法,但這似乎不適合這里?
最終,我想我需要退后一大步,回來客觀地看待這個......
我建議提取一個模型,例如
// 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.