繁体   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