1

私はCakePHPを使用していますが、この問題はすべてのMVCフレームワークに当てはまると思います。

次のことを考慮してください。

  • モデルA

    getAWithConditionOne()
    
  • モデルB

    getBWithConditionsTwo()
    
  • モデルC(AとBの間でモデルを結合)

    getCWithConditionOne()
    getCWithConditionTwo()
    getCWithConditionOneAndTwo()
    

結合モデルで3つの別々のメソッドを作成することなく、この状況を処理するための確立された方法はありますか?ここでデコレータパターンを適用する必要があるように感じますが、その方法がわかりません。

たぶん私は問題を間違って見ているだけです。

4

2 に答える 2

2

はい、さまざまなアプローチがあります。私がこれまでに経験し、見たものから、ここで行動を扱うことができます。

その方向の既存の動作の名前は「NamedScope」(githubにあります)と私が今見つけられない他のものです。

ただし、基本的には、モデルに名前付き条件を設定できます

public $scopes = array(
    'public' => array('Model.active'=>1),
    ...
)

次に、クエリとfind()呼び出しで組み合わせることができます。

array('scope'=>array('Model.public', 'OtherModel.approved', ...)

など、動作はそれらを単一の条件配列に結合します。

于 2011-11-15T03:08:15.400 に答える
0

私には、それはStrategyパターンのユースケースのように聞こえます。getCパラメータとして戦略を期待するメソッドがあります。getConditionsまた、各ストラテジーは、特定のストラテジーの条件を返すメソッドを持つクラスになります。

于 2011-11-15T10:40:30.330 に答える