我有一个持久层,可以为许多客户端提供数据。我还有一个标准化的表结构,这意味着值分布在各个表中。我想设计我的持久性服务,以确保依赖于它的服务进行的往返次数最少:如果可能,不超过一次。
鉴于此,我应该关注一个优雅的解决方案?
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
但是,大多数答案都停留在“做最适合您的事情”上。在这种情况下,程序员通常会做什么?
最佳答案
不要创建通用的“一刀切”的持久层。专门针对要实现的功能用例编写持久性方法。
在执行此操作时,您可能会遇到在两个或多个用例之间可以重用持久性方法或其中一部分的情况。这可能会迫使您重命名该方法以使其更通用(减少与一个特定用例的耦合),或重构以提取公共部分。但是,如果您希望为应用程序获得最佳性能,则将需要针对特定用例进行特定查询。