我正在使用 Grails,并且我有以下域类:
class Pack {
String code
Date publishedDate
//several other properties (including collections hasMany)....
def isPublished() {
return publishedDate != null
}
def publish() {
publishedDate = new Date()
}
def canEdit() {
return !isPublished()
}
}
要销售一个包,我首先需要发布它,然后我使用 publish 方法来发布一个包。
发布后,Pack 无法更改(即发布后,Pack 必须是不可变的实例)。
我的问题是:
- 如何使用 Groovy 在 Immutable 中转换 Mutable 对象?
或者
- 有没有办法从 Hibernate 中检索不可变实例?
另一种选择是将 canEdit() 方法与 Hibernate 事件(beforeUpdate 和 beforeDelete)结合使用。如果 canEdit() == false 那么我可以在 beforeDelete 或 beforeUpdate 中抛出 RuntimeException。是一个好的解决方案吗?
Obs.:我认为 Ruby 中的 freeze 方法正是我所需要的。(http://rubylearning.com/satishtalim/mutable_and_immutable_objects.html)