Grails GORM最佳实践

Grails GORM最佳实践,grails,gorm,Grails,Gorm,有人知道GORM是否有明确的最佳实践指南吗?我发现信息分散在不同的博客和不同的资源中,但我找不到明确的指南。例如,我发现有些东西说不要在控制器中做与数据库相关的事情,而是将这些事情保留在服务层中。不过,如果能了解一下编写简单web应用程序的建议方法,那就太好了。我们是否应该始终在控制器中使用命令对象并将这些命令对象传递给服务?我们是否应该将这些命令对象存储在会话中,而不是将实际的域对象存储在会话中,这似乎会导致许多惰性init异常等 我试图把我找到的信息拼凑起来,但是如果有人知道一个全面的资源,

有人知道GORM是否有明确的最佳实践指南吗?我发现信息分散在不同的博客和不同的资源中,但我找不到明确的指南。例如,我发现有些东西说不要在控制器中做与数据库相关的事情,而是将这些事情保留在服务层中。不过,如果能了解一下编写简单web应用程序的建议方法,那就太好了。我们是否应该始终在控制器中使用命令对象并将这些命令对象传递给服务?我们是否应该将这些命令对象存储在会话中,而不是将实际的域对象存储在会话中,这似乎会导致许多惰性init异常等


我试图把我找到的信息拼凑起来,但是如果有人知道一个全面的资源,那就太好了。

GORM Gotchas系列提供了一些很好的信息。它分为三个部分

回答有关服务和命令对象的特定问题

问:“我们是否应该始终使用命令对象和服务?”

答:有些人会认为这样做太过分了,但我个人认为这是一种很好的模式,使测试和扩展变得更加容易。这看起来可能需要很多努力,但在大型项目中确实会有回报

Q:“我们应该在会话中存储命令对象而不是域对象吗?”

答:在会话中尽可能少地存储(如果有的话)。如果你必须在那里储存东西,最好是小而轻。命令对象(通常)要比域类更好

更新(2014年11月19日)

我想重点介绍一个非常好的系列,它概述了使用GORM和Hibernate所面临的许多潜在问题。这本书很长,但如果您打算在大型多用户项目中使用GORM/Hibernate,则值得一读。不要被消极的方法拒之门外,因为它确实包含了很多有用的信息

这本书大量介绍了Grails中的最佳实践。在撰写本文时,它尚未以最终形式发布,但您可以购买并阅读预览


我最近在寻找与你要求的答案相同的答案,这本书对我帮助很大。

回答得好。:)在使用命令对象(或任何其他使用@Validateable的对象)时,我最喜欢的部分是约束。这确保在移动到服务类以处理业务逻辑之前,所有验证错误(或额外的业务异常)都得到了处理。如果我们这样做,就可以达到良好的抽象级别。不仅如此,它们还可以用于通过控制器收集的数据。JMS消息、Spring集成通道、Spring批处理作业等非常灵活,但为您的服务提供了良好的“合同”。非常好,谢谢!我以前看过一些GORM Gotchas的东西,肯定很有帮助。你证实了我的想法,虽然在会话中存储大量的域对象是不好的,我们应该使用更轻的东西。这本书也快写完了。最近一两周刚刚发布了一个更新,每个章节都进行了更新。作者说他们只是做了一些小的清理,然后就可以完成了。太棒了,谢谢!我一定会把那本书借出去。