我在哪个层“保湿”对象图?

时间:2011-02-18 20:33:43

标签: java jpa

我有一个持久层,为许多客户端提供数据。我还有一个规范化的表结构,这意味着值跨表扩展。我想设计我的持久性服务,以确保依赖它的服务进行最小的往返次数:如果可能的话,不超过一次。

鉴于此,我应该关注一个优雅的解决方案? 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?(由Paul Adamson回答)
* Deep Object Graphs Hibernate

然而,大多数答案都是“做最适合你的事情”。程序员在这种情况下通常会做什么?

1 个答案:

答案 0 :(得分:2)

不要制作通用的单一尺寸适合所有持久层。编写持久性方法专门针对您正在实现的功能用例。

在执行此操作时,您可能会遇到可以在两个或多个用例中重用持久性方法或其中某些部分的情况。这可能会强制您重命名方法以使其更通用(更少耦合到一个特定用例),或重构以提取公共部分。但是,如果您希望应用程序获得最佳性能,则需要针对特定​​用例进行特定查询。