论坛首页 编程语言技术论坛

don't use join table

浏览 7710 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-01  
有“播放室”和“用户”两个模型。一个播放室可以有多个用户在里面,一个用户可以参加多个播放室,于是得到了一个多对多的关系。然而继续分析下去,就把中间没有意义的rooms_users表变成了一个Attending对象。于是就得到了这样美丽的代码:

ruby 代码
  1. attending = user.attend(room)  

随后Attending对象的属性、行为也慢慢出现了。

可能大多数时候,多对多关系都可以拆分成两个一对多关系,并把原本没有意义的连接表变成一个模型对象。

另一个类似的:可能大多数时候,控制器只需要7种基本行为就够了,多余的行为可以描述为对另一种资源的基本操作。例如login实际上是session资源的create操作。
   发表时间:2006-12-02  
完全视乎具体需要。如果盲目扩展join table,结果就是所谓的over-design。

其实大多数情况下join table就够了。
0 请登录后投票
   发表时间:2006-12-02  
用attendance比较好啊,attending当名词好像是医院里的大夫
0 请登录后投票
   发表时间:2006-12-02  
我喜欢
attendance = new Attendance(user,room);
0 请登录后投票
   发表时间:2006-12-02  
嗯,就像use case一样,是个视角的问题,看你更关心什么了,关心user,当然要user.attend(room)啦
0 请登录后投票
   发表时间:2006-12-02  
是啊,视野决定观点
0 请登录后投票
   发表时间:2006-12-02  
DHH的PPT上说status作模型也不错,比如attended,viewed
0 请登录后投票
   发表时间:2006-12-06  
这个就要看需求了,其实先写个多对多,然后再重构也不失为一种办法
0 请登录后投票
   发表时间:2006-12-21  
ruby 代码

   1. attending = user.attend(room) 

这段代码有点问题。

既然要把attending提炼成关系,代码一定是

attending = Attending.create(params[:attending])

而params[:attending]也就是一个map了。:user=>1,:room=>2
0 请登录后投票
   发表时间:2006-12-22  
join-table是一种实现手段。关联关系是否具有属性和行为这是一个建模的问题。“因为不用join-table,所以关联关系的属性和行为就浮现出来了。”,这样的表述好像有些顺序问题吧。

另外,把login当成create session,真的是个好注意吗?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics