В настоящее время у меня есть сайт, который зависит от шаблона Active Record с использованием Doctrine ORM в PHP. Я, как правило, поклонник этого подхода - он очень прост и хорошо подходит для управления простыми приложениями CRUD. Но по мере роста этого сайта я думаю, что моя потребность в более надежной функциональности домена также возрастет. Мне было интересно, какие другие типы шаблонов проектирования данных хорошо работают в сочетании с ORM.
Моя основная проблема сейчас заключается в том, что Doctrine, кажется, лучше всего работает как причудливый язык запросов, поэтому мои модели изобилуют такими методами:
function getBySomeClassfication($classification)
{
return Doctrine_Query::create()
->select('stuff')
->from('ModelClass')
->where('something = ?', $classification)
->execute();
}
или если я хочу получить доступ к классу модели напрямую:
Doctrine::getTable('ModelClass')->findAll();
Это означает, что я в конечном итоге работаю с обертками объектов Doctrine, а не напрямую с объектами моего домена. Я чувствую, что все это должно существовать на более низком уровне абстракции.
Я просто не совсем уверен, каков наилучший подход. Я чувствую, что ORM - отличный слой для запросов к отдельным таблицам и работы с отношениями. Но я хотел бы иметь больше гибкости при создании объектов домена, которые работают с несколькими моделями / таблицами.
Я прочитал об использовании шаблона Repository, но все еще имею несколько колебаний:
Я не хочу просто создавать бессмысленный слой абстракции, который просто раздувает исходную проблему.
Я не хочу заново создавать или делать бесполезным весь смысл использования Active Record ORM.
Есть мысли или предложения?