2009-08-05 36 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,但也許它也可以幫助你,對於架構的想法。