来来,会RoR或者Hibernate的都可以回答。
1个blog有N个comment,现在已知目标blog的id,要持久化一个comment,做法有如下2种:
第1种
[code=Ruby]blog = Blog.find_by_id(params[:id])
comment = Comment.new(params[:comment])
blog.comments < < comment[/code]
第2种
[code=Ruby]comment = Comment.new(params[:comment])
comment.blog_id = params[:id]
comment.save [/code]
你会选择哪一种?为什么?
[解决办法]
第一种,两者之间的关联是由model中定义的,至于用的是外键,还是其它键都可以由model中进行调整。而如果采用第二种,就像你所说的,一是不那么的OO,另一方面,如果blog中不存在该id(也许在你删除时,改blog已被删除等),你在comment中的附值也是无效的。其它方面就是不利于程序的修改和阅读。万一两者关系发生变化,你要改的位置可能就多了。
目前来说,我都是采用的第一种方法。