2011-02-18 63 views
2

我有一個爲許多客戶端提供數據的持久層。我也有一個標準化的表結構,這意味着值分佈在表中。我想設計我的持久性服務,以確保依賴它的服務進行最小程度的往返:如果可能,不要超過一次。哪一層可以「保溼」對象圖?

鑑於此,我應該關注一個優雅的解決方案?
1.我是否確保客戶端可以在提取期間指示他們想要的對象圖的一部分? (從而減少往返)[例如:fetch(parent, list<child-object-name>)]
2.我是否確保我提供常見方法,例如水合物體的部分以及基本取材? [例如:hydrate(parent, list<child-table-name>)]
3.執行我提供基本信息以開始與(例如,對象圖1的深度只/只查找表對象),其餘只根據請求?

據我所知,網上有很多很多的討論,都有很好的資料。我看過一些,以及:
* http://forum.springsource.org/archive/index.php/t-23439.html
* How can I access lazy-loaded fields after the session has closed, using hibernate?(由保羅·亞當森回答)
* Deep Object Graphs Hibernate

然而,大部分的答案弄清「做什麼最適合你」。程序員通常在這種情況下做什麼?

回答

2

不要製作通用的單一尺寸適合所有持久層。專門爲您正在實現的功能用例編寫持久性方法。

雖然這樣做,你可能會滿足其中一個持久性的方法,或者它的某些部分,可以在兩個或多個用例可以重複使用的情況。這可能會迫使你重新命名的方法,使其更通用的(少耦合到一個特定用例),或重構提取公共部分。但是,如果您希望爲您的應用提供最佳性能,那麼您將需要針對特定​​用例進行特定查詢。

+0

同意;我們有一個現有的系統,人們選擇每次添加新的特定方法,導致代碼膨脹。這導致了每隔一次迭代的大規模重構工作。那麼,人們最成功的默認行爲是什麼? – CMR 2011-02-18 20:59:14

相關問題