[英]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.