20130516-Grails In Action-3、建模(06小节)

上一节主要是对象和对象之间的关系建立,还有一种自参照关系。实际上是1:m的变体,只是多的一方参照的还是自身

比如一个User可以关注其他User,就可以使用自参照建立关系

1、修改User

class User {
    static hasMany = [ posts : Post, tags : Tag, following : User ]
    ......
}

这里使用following进行自身关联

2、编写一个测试方法

在UserIntegrationTests类中增加一个testFollowing方法

 1     /**
 2      * 测试自关联关系
 3      */
 4     @Test
 5     void testFollowing() {
 6         def glen = new User(userId: 'glen', password:'password').save()
 7         def peter = new User(userId: 'peter', password:'password').save()
 8         def sven = new User(userId: 'sven', password:'password').save()
 9         
10         glen.addToFollowing(peter)
11         glen.addToFollowing(sven)
12         
13         assertEquals 2, glen.following.size()
14         sven.addToFollowing(peter)
15         assertEquals 1, sven.following.size()
16     }

following关联关系是引用addToFollowing()方法增加关联信息

3、以上就是所有已经建立好的关系,Grails运行起来后会自动生成相应的表结构如下:

20130516-Grails In Action-3、建模(06小节)

4、总结和最佳实践

  • Use domain-driven design:使用对象模型的思维去实现对象之间的关系,再形成表结构,甚至不用去关心数据存储
  • Learn the basic modeling options well:对模型了解的透彻了,对业务也就了解了。在设计模型时尽量简单
  • Use tests to experiment:利用测试工具验证模型关系是否正确,是否能达到预期的效果
  • Don’t trust users—validate:不要相信用户(软件使用人员),因为用户操作的想象力比设计者丰富,尽量在系统中验证数据

5、代码清单

domain
    package:com.grailsinaction
        User.groovy
        Porfile.groovy
        Post.groovy
        Tag.groovy
test\integration
    package:com.grailsinaction
        PostIntegrationTests.groovy
        UserIntegrationTests.groovy

6、代码打包下载

你可能感兴趣的:(grails)