如果其他块块落在任何设计模式下,则会很长

时间:2010-12-15 01:06:58

标签: c#

例如,如果有一个if else喜欢下面,我想知道这是否属于任何设计模式,在日常生活中我偶然遇到过这样的事情并且不认为它的好 写下这么多if else块

任何指导都非常感激

样品///

 if(dotcom){
  else if (frenc){}
  else if (german){}
  else if (brazil){}
  else if (someothercountry){}
 // and the else if block goes on 
  else {}
  }

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

你肯定会有所作为。如果感觉不对或重复,可能有更好的方法。

您的示例似乎是本地化问题。由于您使用的是.NET,因此您可以查看System.Globalization命名空间,以获取有关如何以面向对象的方式处理UI本地化的一些提示。

对于任何给定的情况,要遵循的确切模式而不是if / else将取决于花括号内的内容 - 不同的国家/地区是否具有不同的属性值,例如“Population”或“Url Suffix”或“我是否需要在我去之前申请签证“?让我们假设后者,99%的情况可能就是这种情况。基本上,如果你有这样的东西:

public class Country
{
    public string Name { get; set; }
    public string DefaultLanguage { get; set; }
    public bool NeedToApplyForAVisaFirst { get; set; }
    public string DefaultWordForClickHere { get; set; }
}

代码可以来自:

if ("france")
{
    button.Text = "French(Fr) for 'Click Here'";
}
else if ("brazil")
{
    button.Text = "Portuguese(Br) for 'Click Here'";
}
.....

为:

button.Text = User.Country.DefaultWordForClickHere;

答案 2 :(得分:1)

一般来说,代码气味太多switch语句和if-else if这样的语句。有两种可能的解决方案:

  1. 您通常应该依靠面向对象语言提供的虚方法调度机制来找出将要执行的代码片段。您需要为每个条件创建一个类,并使用abstract基类。在每个类中,您将覆盖自定义行为的方法。

  2. 使用查找表(在您的具体问题中,我推测这可能更相关;如果您在所有路径中都有类似的代码但是它们将依赖于某些变量的不同值,则这更有用)。

  3. 我认为这种块有合法的用例,大型对象层次结构并不总是值得的。这是代码味道,而不是一个硬性规则。