2011-02-18 30 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

相关问题