更新。检查这些benchmarks以自行测试。
我是否应该将对象集合存储在某些服务的变量中,如下所示:
ConfigService{
private def countries = Country.findAllBySomeCondition()
public def countries(){
return countries
}
}
或使用:
ConfigService{
public def countries(){
return Country.findAllBySomeCondition()
}
}
如果该集合经常只用于阅读。
答案 0 :(得分:2)
取决于。在您的第一个示例中,缓存了值,这可能会更高效,但如果在某个时候添加更多国家/地区,则可能不会显示您的服务呼叫。但是,如果您经常使用第二个示例调用.countries()
,则可能会产生一些性能提升。
最好的选择可能是获得一些关于查询花费时间的基准,并决定是否最好自己尝试缓存值,或确保它始终是最新的。我的建议是坚持使用第二个例子,因为Hibernate已经为你处理了一些缓存,而且列表可能不足以显着阻碍你的app。
答案 1 :(得分:1)
@ GrailsGuy的回答是现场,我给了他一个+1。为您提供一些其他选择:
1)如果您的国家/地区列表没有更改,您可以将它们放在枚举中并避免使用DB。
2)如果您授予用户添加/删除/编辑国家/地区的功能,则可以像示例1中那样缓存列表,但是当用户添加/删除/编辑国家/地区时,您可以强制重新加载列表。
ConfigService{
private def countries
public def countries(){
if(countries == null) {
countries = Country.findAllBySomeCondition()
}
return countries
}
}
CountryService {
def configService
def addCountry() {
//Do add country stuff
configService.countries = null
}
}
这样,您可以缓存这些国家/地区,直到它们得到更新。就像@GrailsGuy所说虽然Hibernate会在某种程度上为你做这件事。