将if-elseif块重构为哈希和类

时间:2019-02-08 19:55:12

标签: c# design-patterns refactoring

我正在处理旧版asp.net代码(无论如何将其转换为最新的.net版本),我遇到的文件包含15 500长的if-elseif块(具有700个条件)。每个条件都具有相同的结构:

if(a == "aaa")
{
  .....
}
else if(a == "bbb")
{
 ....
}
.....

我认为它需要重构。我想将每个块中的代码拆分为单独的类,将它们命名为“ aaa”,“ bbb”,...,并使用Dictionary或Hashtable来存储对它们的引用。它可能具有一个接口,该接口的方法execute()具有特定的返回类型。问题是我认为每个类的实例化以及将对象存储到哈希表都将花费一些时间,并且我认为从性能角度来看,这会更糟(对于每个构造哈希表的请求)。它必须总共存储700个对象,然后仅检索一个对象。我的问题是:

  1. 是否有解决此问题的更好方法?例如,也许我将存储类而不是对象,然后使用反射实例化类并调用其方法?

  2. 应用这样的设计(将if / else if块划分为类->向字典添加对象(实现某些接口)->从字典中获取一个对象)在性能上是多么痛苦

  3. 比方说,我将所有类别放到文件夹F中,如何检索所有类别并将其添加到字典中

  4. 有什么建议,还有解决问题的其他方法吗?

1 个答案:

答案 0 :(得分:0)

好吧,如果您不需要实例变量,那么我建议您使用一个静态类,并将它们作为单独的函数。然后,您可以定义一个兼容的委托方法,并存储对函数本身而不是对类的引用。由于它们将在静态上下文中执行,因此无需类实例化。

加载散列图需要一些内存,但之后的占用空间可以忽略不计。