避免在字符串值上选择大小写

Posted

技术标签:

【中文标题】避免在字符串值上选择大小写【英文标题】:avoid select case on string value 【发布时间】:2013-08-20 16:54:54 【问题描述】:

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

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

select case value

  case "abc"
     method1()

  case "def"
     method2()

end select

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

【问题讨论】:

如今,依赖注入取代了严肃的工厂。您的工厂可以是一个 XML 文件,您可以在不重新编译代码的情况下对其进行编辑。 你能举个例子或外部链接吗? 检查这个项目。 codeproject.com/Articles/26466/… 这对于这篇文章的需要来说太过分了......谢谢 这取决于你,你用什么。我们不知道您的项目范围等。对于小型项目,有 3、4、5 个策略,一个策略模式就足够了。我参与了控制工厂生成数百个控件的项目——我们需要依赖注入。但是在适当的时候使用 CASE 或 IF 并没有错。您需要考虑范围、可维护性、功能开发等,并采取适当的方法。 【参考方案1】:

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

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()

【讨论】:

以上是关于避免在字符串值上选择大小写的主要内容,如果未能解决你的问题,请参考以下文章

在单元格标签等于给定字符串的collectionView或TableView上选择行/部分?

如何允许用户在 Select2 上选择空字符串

在语言选择上选择适当的 .rc 文件

如何在同一列上选择一些值,然后将剩余值作为 sql 中的新列

根据在第一个选项上选择的选项值隐藏选项选择值

如何在表格上选择并计算出现的一些值