【问题标题】:Are there any anti-pattern names for writing code like this?有没有用于编写这样的代码的反模式名称?
【发布时间】:2011-05-02 16:12:25
【问题描述】:

这里有一些代码使用参数类来包含Show() 方法的可能参数。这个FooOption 类中的值不是很相关。您可以通过查看下面的Show() 的实现来了解这一点。我知道这是不好的代码,但是否有任何与此相关的反模式?

class FooOptions {
  public int? Id { get; set; }
  public string BazContext { get; set; }
  public int? BazId { get; set; }
}

class BarMgr {
  public Bar Show(FooOptions options) {
    if (options == null)
      options = new FooOptions();
    if (options.Id.HasValue)
      return svc.GetBar(options.Id.Value);
    if (!string.IsNullOrEmpty(options.BazContext) && options.BazId.HasValue)
      return svc.GetBar(options.BazContext, options.BazId.Value);
    return null;
  }
}

更新: 我知道参数对象不是反模式。根据我的经验,参数对象属性是相关的。这是我试图找到的可能的反模式。设置所有三个属性没有意义。

【问题讨论】:

  • 使用参数类不是反模式。
  • 谢谢,我已经知道了。我已经更新了我的问题,以减少对此的困惑。

标签: c# design-patterns anti-patterns parameter-object


【解决方案1】:

更新后,我的回答如下:
据我所知,这样的反模式并没有实名,但这种方法至少违反了一个原则:
Single-Responsibility-Principle

这确实是方法的问题,而不是参数对象的问题。

【讨论】:

    【解决方案2】:

    它被称为参数对象模式,它不被视为反模式——它是处理参数过多的方法的好方法。

    【讨论】:

    • 我在询问参数对象中的属性,它们之间没有任何关系。
    【解决方案3】:

    如果您经常使用 options 可能会出现反模式,我们有一种叫做 feature envy 的东西,这表明您可能希望将功能转移到实际中正在使用的功能。

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多