ID在任何环境中都占有重要的地位,比如说我们每个人都有个ID,这就是身份证号码。
当然,也有人有两个身份证,这些人是异类,在程序中凡是有两个ID的东西也一样。
GRAILS中的ID的作用相对于其他系统的ID则更为巨大。domain默认为一个domain对象产生一个ID,同时命令行生成的画面也将ID作为params的一个重要的参数来传递。
如果我们放弃使用ID,我们在GRAILS程序的开发中也不会好受,这就是所有framework带给我们的缺点。
当你无法改变一个东西的时候,你就得学会适应。
如果你暂时转不过这个弯,或许我下面谈到的内容会让你的思想得到解脱。
GRAILS是一个整合了多种框架的应用程序框架,作为一个framework而言,它本身就规定了应用程序开发的具体模式,它在提供各种便利的同时,也将你限制在一定的范围内。这或许就是framework单词的frame的意思。
ID作为GRAILS底层hibernate persist框架的一部分,也不可避免的作为限制条件将开发手段限制住。
默认的,ID是作为domain表的主键而存在。如果不用ID作主键,而用其他的多个字段建立组合主键的话,GRAILS命令生成的controller和view就必须作很大的改动才可用。这样我们又不得不手写大量的代码,这是我们所深恶痛绝的。
从另外一个方面来思考,多个字段的组合主键实际上是把多个字段的组合作为一个唯一的决定条件去决定一个真值表达式,这在关系数据库的原理当中和ID作为主键并没有什么区别。多个字段的组合实际上是一种变相的将业务逻辑存放在数据库端的解决方案。实际上,如果用constrains将这种商业逻辑以groovy代码的形式固定下来,要比多个字段组合更为符合现在的多层的框架。这样,数据库的真正功能就和文件一样,只是作为一个persist的媒介而存在。在更换persist媒介的情况下,后者显然要比前者更灵活。估计这也是GRAILS框架设计者的想法。
作为GRAILS的用户,个人建议其他用户没有必要和GRAILS的默认属性过不去。从了吧,或许没有你想象中那么痛苦。