2009-08-05 86 views
3

我目前有一个网站,它依赖于使用PHP中Doctrine ORM的活动记录模式。我通常是这种方法的粉丝 - 它非常简单,适用于管理简单的CRUD应用程序。但随着这个网站的增长,我认为我对更强大的域功能的需求也会增长。我想知道其他类型的数据设计模式如何与ORM结合使用。PHP数据访问设计模式来补充ORM

我的基本问题,现在的问题是,这种理论似乎工作最好的,因为看中查询语言,所以我的模型是用类似的方法充斥:

function getBySomeClassfication($classification) 
{ 
    return Doctrine_Query::create() 
       ->select('stuff') 
       ->from('ModelClass') 
       ->where('something = ?', $classification) 
       ->execute(); 
} 

,或者如果我想直接访问模型类:

Doctrine::getTable('ModelClass')->findAll(); 

这意味着我最终将使用Doctrine的对象包装器而不是直接在我的域对象上工作。我觉得所有这些都应该存在于较低的抽象层次上。

我只是不太确定最好的方法是什么。我觉得ORM是查询单个表格和处理关系的一个很好的层。但我希望在创建跨多个模型/表的域对象方面有更大的灵活性。

我已经读了有关使用Repository模式,但还是有一些犹豫:

  1. 我不想只是创建了一个抽象层毫无意义,简单地堆满了原来的问题。

  2. 我不想重新创建或渲染无用的使用Active Record ORM的全部观点。

有什么想法或建议吗?

回答

1

您需要在某个时间点使用对象包装器(数据访问对象),并且在某些时候您的调用将实现(此处为Doctrine-)特定。它主要取决于你当前的架构,你需要在多少层之间放置,但我会说 - 尽可能少。你有什么具体的问题,该教义不解决?

当使用ORM作为(从头开始)面向对象域模型开发的工具时,我有时看不出需要处理数据库细节(例如,一个域实体分布在多个表)的问题。 我最近在answered a more Java specific question here,但也许它也可以帮助你,对于架构的想法。