以下是一些使用参数类来包含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;
}
}
更新: 我知道参数对象不是反模式。根据我的经验,参数对象属性是相关的。这是我试图找到的可能的反模式。设置所有三个属性毫无意义。
答案 0 :(得分:5)
它被称为参数对象模式,并且它不被视为反模式 - 它是处理原本会有太多参数的方法的好方法。
答案 1 :(得分:5)
更新后,我的回答是:
据我所知,这样的反模式没有实名,但至少有一个原则是这种方法违反了:
Single-Responsibility-Principle。
这确实是方法的问题,而不是参数对象的问题。
答案 2 :(得分:2)
如果您使用选项可能会出现反模式,我们会有一些名为 feature envy 的内容,并且表明您可能希望将功能转移到实际正在使用的功能。