2006-12-01
don't use join table
关键字: ruby rails activerecord
有“播放室”和“用户”两个模型。一个播放室可以有多个用户在里面,一个用户可以参加多个播放室,于是得到了一个多对多的关系。然而继续分析下去,就把中间没有意义的rooms_users表变成了一个Attending对象。于是就得到了这样美丽的代码:
随后Attending对象的属性、行为也慢慢出现了。
可能大多数时候,多对多关系都可以拆分成两个一对多关系,并把原本没有意义的连接表变成一个模型对象。
另一个类似的:可能大多数时候,控制器只需要7种基本行为就够了,多余的行为可以描述为对另一种资源的基本操作。例如login实际上是session资源的create操作。
ruby 代码
- attending = user.attend(room)
随后Attending对象的属性、行为也慢慢出现了。
可能大多数时候,多对多关系都可以拆分成两个一对多关系,并把原本没有意义的连接表变成一个模型对象。
另一个类似的:可能大多数时候,控制器只需要7种基本行为就够了,多余的行为可以描述为对另一种资源的基本操作。例如login实际上是session资源的create操作。
- 21:30
- 浏览 (4594)
- 论坛浏览 (5578)
- 评论 (9)
- 分类: 企业应用建筑师
- 相关推荐
评论
join-table是一种实现手段。关联关系是否具有属性和行为这是一个建模的问题。“因为不用join-table,所以关联关系的属性和行为就浮现出来了。”,这样的表述好像有些顺序问题吧。
另外,把login当成create session,真的是个好注意吗?
另外,把login当成create session,真的是个好注意吗?
ruby 代码
1. attending = user.attend(room)
这段代码有点问题。
既然要把attending提炼成关系,代码一定是
attending = Attending.create(params[:attending])
而params[:attending]也就是一个map了。:user=>1,:room=>2
1. attending = user.attend(room)
这段代码有点问题。
既然要把attending提炼成关系,代码一定是
attending = Attending.create(params[:attending])
而params[:attending]也就是一个map了。:user=>1,:room=>2
springhill
2006-12-02
回复
嗯,就像use case一样,是个视角的问题,看你更关心什么了,关心user,当然要user.attend(room)啦
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子







评论排行榜