1

下面是一些使用参数类来包含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;
  }
}

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

4

3 回答 3

5

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

于 2011-05-02T16:15:31.780 回答
5

在你更新之后,我的回答是:
据我所知,这样的反模式没有实名,但这种方法至少违反了一个原则:
单一责任原则

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

于 2011-05-02T16:22:22.730 回答
2

如果您经常使用选项,则可能存在反模式,我们有一种称为功能嫉妒的东西,这表明您可能希望将功能转移到正在使用的实际功能中。

于 2011-05-02T16:24:36.323 回答