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;
  }
}

更新:パラメータオブジェクトがアンチパターンではないことを知っています。私の経験では、パラメータオブジェクトのプロパティは関連しています。これは、私が見つけようとしている可能性のあるアンチパターンです。3つのプロパティすべてを設定しても意味がありません。

4

3 に答える 3

5

これはパラメータオブジェクトパターンと呼ばれ、アンチパターンとは見なされません。これは、パラメータが多すぎるメソッドを処理するための良い方法です。

于 2011-05-02T16:15:31.780 に答える
5

更新後、ここに私の答えがあります。
私が知る限り、このようなアンチパターンの実際の名前はありませんが、この方法に違反する原則が少なくとも1つあります。
それは単一責任の原則です。

そして、それは実際にはメソッドの問題であり、パラメータオブジェクトの問題ではありません。

于 2011-05-02T16:22:22.730 に答える
2

オプションを頻繁に使用すると、アンチパターンが発生する可能性があります。これは、機能の羨望と呼ばれるものがあり、使用されている実際の機能に機能を移動することを示しています。

于 2011-05-02T16:24:36.323 に答える