我如何保持代码DRY与多个条件跨胖模型



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

考虑以下内容:

  • 建模
    getAWithConditionOne()
    
  • 模型B
  • getBWithConditionsTwo()
    
  • 模型C (A &B)

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

也许我看问题的角度不对。

是的,有不同的方法。根据我目前的经验和所见,你可以在这里使用行为。

在该方向上的现有行为的名称是"NamedScope"(在github中找到)和其他我现在找不到。

但基本上你可以在你的模型中设置命名条件
public $scopes = array(
    'public' => array('Model.active'=>1),
    ...
)

你可以在你的查询和find()调用中组合它们:

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

等。该行为将它们连接成单个条件数组。

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

最新更新