1

rake タスクで 50 個のファイルを作成するために約 50 回呼び出されるモデルがあります。

コードの約 90% は再利用できますが、いくつかのメソッドをオーバーライドする必要があります。元のテーブルから継承することだけを考えていましたが、これは約 40 ~ 50 のモデルにつながる可能性があり、適切ではないと感じました。

class Dog 
  def bark
     "woof"
  end
end

class Wolf << Dog
  def bark
     "growl"
  end
end

各モデルでオーバーライドする必要があるメソッドは、おそらく 3 ~ 4 個程度です。

私が持っていた他のアイデアは、この投稿から MODULE + EXTEND + SUPER DECORATOR を使用することでした: http://robots.thoughtbot.com/post/14825364877/evaluating-alternative-decorator-implementations-in Ie

class Dog
  def bark
   "woof"
  end
end

module Wolf
  def bark
   "growl"
  end
end

dog = Dog.new
dog.extend(Wolf)
dog.bark   #growl

次に、50 個のモジュールを用意し、作成時に適切なモジュールを拡張します。

では、どちらが最良の選択肢でしょうか、またはこの状況に適したパターンはありますか?

4

1 に答える 1

1

依存関係を説明する方法から、これは実際には、サブクラス化または混合ではなく、戦略パターンにとって完璧な状況のように思えます.

サブクラス化または混合することにより、特定がベースのメソッドを呼び出す可能性があり、ベース API を拡張する可能性があることを示します。さらに、プライベート メソッドは、潜在的なコードの匂いとして常に扱われるべきです。スペシフィックが、ベースがインスタンスを持ち、メソッドを呼び出す戦略オブジェクト (モジュール メソッドを含むモジュールなど) である場合、実際の依存関係の最も明確な仕様が提供されます。

参照: http://en.wikipedia.org/wiki/Composition_over_inheritancehttp://c2.com/cgi/wiki?StrategyPattern

于 2012-06-01T01:37:31.517 に答える