覆盖grails中域属性的setter是否正确?

时间:2014-04-30 15:45:25

标签: unit-testing grails gorm grails-domain-class

在域类中覆盖属性的setter和getter是一个好主意吗?假设我们有一个具有name属性和capitalizedName的域类,我们在其中存储清理名称:

class Person {
    String name
    String capitalizedName

    String setName(String name){
        this.name = name
        this.searchName = name.replaceAll("[^A-Za-z0-9 ]", "").trim().toUpperCase()
    }
}

如果我覆盖setter并在单元测试中尝试使用动态查找器:

Person.findByName('Whatever')

我得到了

java.lang.IllegalArgumentException: Property [name] is not a valid property of class [com.test.Person]

但在运行时它的工作非常好。

我可以修改域类的getter和setter吗?如上所述,实现行为的最佳方式是什么?

1 个答案:

答案 0 :(得分:4)

setter的返回类型应为void

 void setName(String name){
        this.name = name
        this.searchName = name.trim().replaceAll("[^A-Za-z0-9 ]", "").replaceAll(" +", " ").toUpperCase()
 }