Существуют ли какие-либо имена анти-шаблонов для написания кода, подобного этому?

Вот некоторый код, который использует класс параметров для хранения возможных параметров метода 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;
  }
}

Обновление: я знаю, что объекты параметров не являются анти-шаблоном. По моему опыту, свойства объекта параметра связаны между собой. Это возможный анти-шаблон, который я пытаюсь найти. установка всех трех свойств не имеет смысла.


person Charles Lambert    schedule 02.05.2011    source источник
comment
Использование класса параметров не является антишаблоном.   -  person Daniel Hilgarth    schedule 02.05.2011
comment
Спасибо, я уже в курсе. Я обновил свой вопрос, чтобы уменьшить путаницу по этому поводу.   -  person Charles Lambert    schedule 02.05.2011


Ответы (3)


После вашего обновления, вот мой ответ:
Насколько я знаю, нет настоящего названия для такого анти-шаблона, но есть по крайней мере один принцип, который этот метод нарушает:
Принцип единой ответственности.

И это действительно проблема метода, а не объекта параметра.

person Daniel Hilgarth    schedule 02.05.2011

Он называется шаблон объекта параметра и не считается антишаблоном — это хороший способ работы с методами, которые в противном случае имели бы слишком много параметров.

person Ernest Friedman-Hill    schedule 02.05.2011
comment
Я спрашиваю о свойствах объекта параметра, которые не имеют отношения друг к другу. - person Charles Lambert; 02.05.2011

Если вы часто используете options, может возникнуть анти-шаблон. У нас есть что-то, называемое зависимостью к функциям, и это указывает на то, что вы, возможно, захотите переместить функциональность в фактическую используемую функцию. .

person ralphtheninja    schedule 02.05.2011