Есть ли какие-нибудь анти-паттерны для написания такого кода? - PullRequest
1 голос
/ 02 мая 2011

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

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

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

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

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

5 голосов
/ 02 мая 2011

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

2 голосов
/ 02 мая 2011

Там может быть анти-шаблон, если вы используете опции , у нас есть нечто, называемое Зависть к функции , и это указывает на то, что вы, возможно, захотите перенести функциональность в действующую функцию б.

...