Grails GORM 最佳实践

标签 grails grails-orm

有谁知道 GORM 是否有明确的最佳实践指南?我发现信息分散在不同的博客和不同的资源中,但我找不到明确的指南。例如,我发现一些内容说不要在 Controller 中执行与数据库相关的操作,并将这些操作保留在服务层中。不过,最好了解一下编写简单 Web 应用程序的建议方法是什么。我们是否应该始终在 Controller 中使用命令对象并将这些命令对象传递给服务?我们是否应该将这些命令对象存储在 session 中,而不是将实际的域对象存储在 session 中,这似乎会导致很多惰性初始化异常等?

我尝试将找到的信息拼凑在一起,但如果有人知道综合资源,那就太好了。

最佳答案

GORM 陷阱系列提供了一些重要信息。它分为三个部分。

GORM Gotchas (Part 1)

GORM Gotchas (Part 2)

GORM Gotchas (Part 3)

回答您有关服务和命令对象的具体问题。

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

答:有些人会认为这样做有点矫枉过正,但我​​个人认为这是一个很好的模式,并且使事情更容易测试和扩展。这可能看起来需要付出很大的努力,但在大型项目中确实会得到返回。

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

答:在 session 中存储尽可能少的内容(如果有的话)。如果您必须在那里存放东西,最好是小而轻的。命令对象(通常)比域类更适合这一点。

更新(2014年11月19日)

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

I don't like Hibernate (and Grails), PART 1

I don't like Hibernate/Grails, part 2, repeatable finder problem: trust in nothing!

I don't like Grails/Hibernate part 3. DuplicateKeyException: Catch it if you can.

I don't like Grails/Hibernate, part 4. Hibernate proxy objects.

I don't like Hibernate/Grails part 5: auto-saving and auto-flushing

I don't like Hibernate/Grails part 6, how to save objects using refresh()

I don't like Hibernate/Grails part 7: working on more complex project

I don't like Hibernate/Grails, part 8, but some like Hibernate and Grails. Why?

I don't like Hibernate/Grails part 9: Testable code

I don't like Hibernate/Grails part 10: Repeatable finder, lessons learned

I don't like Hibernate/Grails part 11. Final thoughts.

关于Grails GORM 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632463/

相关文章:

java - HIbernate 在 Getter/Setter 中加密和解密?

grails - 为 Grails GORM 字符串设置默认 maxLength?

grails - 用于抛出 UnknownHostException 的 grails 的 RabbitMq 插件

testing - 在不打开浏览器的情况下使用 chromeDriver 运行 Geb 测试

tomcat - Grails:WAR 文件部署:查找端口

grails - 如何一步一步保存 'rooted'域类树?

spring - 如何更改 Grails 项目中的 Spring 版本?

oracle - 测试 Oracle to_date 函数

chalice /GORM : Dynamic multiple joins

mongodb - Grails 使用 Mongodb : Spock Exception thrown when using withCriteria