Как сохранить код СУХОЙ для нескольких условий в толстых моделях? - PullRequest
1 голос
/ 14 ноября 2011

Хотя я работаю с CakePHP, я думаю, что эта проблема будет применима к любой среде MVC.

Обратите внимание на следующее:

  • Модель A

    getAWithConditionOne()
    
  • Модель B

    getBWithConditionsTwo()
    
  • Модель C (Соединить модель между A и B)

    getCWithConditionOne()
    getCWithConditionTwo()
    getCWithConditionOneAndTwo()
    

Существует ли какой-либо установленный способ справиться с этой ситуацией без необходимости создания трех отдельных методов в модели соединения? Такое ощущение, что здесь нужно применить шаблон Decorator, но я не понимаю, как это сделать.

Может быть, я просто смотрю на проблему неправильно.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

да, есть разные подходы. из того, что я испытал и увидел до сих пор, вы можете работать с поведением здесь.

имя существующего поведения в этом направлении - "NamedScope" (найден в github) и другие, которые я не могу найти прямо сейчас.

но в принципе вы можете настроить именованные условия в вашей модели

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

, который вы могли бы затем объединить в своих запросах и найти () вызовы:

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

и т.д.. поведение объединяет их в один массив условий.

0 голосов
/ 15 ноября 2011

Для меня это звучит как сценарий использования шаблона Стратегии.У вас будет метод getC, ожидающий стратегию в качестве параметра.И каждая стратегия будет классом с getConditions методом, возвращающим условия для конкретной стратегии.

...