我目前有一个使用 PHP 中的 Doctrine ORM 依赖于 Active Record 模式的站点。我通常是这种方法的粉丝——它非常简单,非常适合管理简单的 CRUD 应用程序。但是随着这个站点的增长,我认为我对更强大的域功能的需求也会增长。我想知道还有哪些其他类型的数据设计模式可以与 ORM 结合使用。
我现在的基本问题是,Doctrine 似乎最适合作为一种花哨的查询语言,所以我的模型到处都是这样的方法:
function getBySomeClassfication($classification)
{
return Doctrine_Query::create()
->select('stuff')
->from('ModelClass')
->where('something = ?', $classification)
->execute();
}
或者如果我想直接访问模型类:
Doctrine::getTable('ModelClass')->findAll();
这意味着我最终使用 Doctrine 的对象包装器而不是直接在我的域对象上工作。我觉得所有这些都应该存在于较低的抽象层次上。
我只是不太确定最好的方法是什么。我觉得 ORM 是查询单个表和处理关系的绝佳层。但我希望在创建跨多个模型/表工作的域对象方面具有更大的灵活性。
我已经阅读了使用存储库模式,但仍有一些犹豫:
我不想仅仅创建一个无意义的抽象层,只是简单地冒出原始问题。
我不想重新创建或渲染使用 Active Record ORM 的全部意义。
有什么想法或建议吗?