避免在字符串值上选择case

时间:2013-08-20 16:54:55

标签: .net vb.net coding-style switch-statement

我读了很多关于“干净代码”和“设计模式”的文章,他们说要避免在代码中“切换/选择案例”。他们说“使用多态”或“战略模式”。

如何使用这些概念避免字符串值上的“选择案例”(VB.Net)?

select case value

  case "abc"
     method1()

  case "def"
     method2()

end select

即使我根据字符串的值构建了一个返回对象的工厂,“select case”语句仍然是......

1 个答案:

答案 0 :(得分:2)

如果所有方法都采用相同数量和类型的参数以及相同的返回类型,您只需将它们添加到字典中,如下所示:

Dim methods = New Dictionary(Of String, Action)
methods.Add("abc", AddressOf method1)
methods.Add("def", AddressOf method2)

然后像这样调用它

methods(value)()

或者,对于更面向对象的方法,为工厂创建一个接口:

Interface FooFactory
    Function CreateFoo() As Foo
End Interface

再次将它们添加到字典中:

Dim factories = New Dictionary(Of String, FooFactory)
factories.Add("abc", New FooFactory1)
factories.Add("def", New FooFactory2)

然后像这样调用它

Dim foo = factories(value).CreateFoo()