【问题标题】:Refactoring ifs重构 ifs
【发布时间】:2012-01-29 01:41:47
【问题描述】:

如何重构以下包含许多 if 且每个块包含不同场景的代码。

if(condition1)
{
  ConfigCondition1();
  GetSetCondition1Results();
}
if(condition2)
{
  ConfigCondition2();
  GetSetCondition2Results();
}
if(condition3)
{
  ConfigCondition3();
  GetSetCondition3Results();
}

【问题讨论】:

  • 为什么要重构它?我可能会使用 switch 语句
  • 为什么要重构它,以何种方式重构?我现在的答案将是用例(但我想这不会有太大帮助)
  • 多态性可能是答案,但我们不知道你在做什么以及你想要实现什么。这段代码属于什么上下文?
  • 也许您可以使用 Dictionary 类型来存储条件,并根据条件获取已分配相关方法的操作委托并执行它。

标签: c# refactoring


【解决方案1】:

Strategy pattern 似乎最适合您的问题。

使用策略模式,客户端可以从一组已实现的算法中选择将在运行时执行的算法。

【讨论】:

    【解决方案2】:

    通过使用Strategy Design Pattern

    策略模式将算法封装在对象中,并帮助您将条件语句重构为简单的函数调用。

    Here is a nice example in .NET,您可以使用。

    【讨论】:

      【解决方案3】:

      遵循本指南。

      • 所有if 语句是否都比较相同的值?如果是,请使用switch
      • if 块是否排除其他块?如果是,请使用else if
      • 一个块是否依赖于另一个块的值?如果是,请将它们嵌套在另一个中。
      • 如果以上都不是,即无论如何都必须检查所有块,则无法进行更多优化。

      【讨论】:

        猜你喜欢
        • 2013-10-25
        • 2010-11-19
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多