1

虽然我正在使用 CakePHP,但我认为这个问题适用于任何 MVC 框架。

考虑以下:

  • A型

    getAWithConditionOne()
    
  • B型

    getBWithConditionsTwo()
    
  • 模型 C(A 和 B 之间的连接模型)

    getCWithConditionOne()
    getCWithConditionTwo()
    getCWithConditionOneAndTwo()
    

是否有任何既定的方法来处理这种情况而不必在连接模型中创建三个单独的方法?感觉很像是应该在这里应用装饰器模式,但我不知道该怎么做。

也许我只是看错了问题。

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

对我来说,这听起来像是策略模式的一个用例。你会有一个getC方法,期望一个策略作为参数。每个策略都是一个类,其中有一个getConditions返回特定策略条件的方法。

于 2011-11-15T10:40:30.330 回答