0

当我has_one可以嵌入关联对象并使用composed_of和/或serialize. 在我总是加入关联对象并且不需要复杂查询的情况下。例如:

狗(颜色,重量)has_one :head头(牙齿数量,眼睛颜色)

我可以用 Dog(color,weight,head_teeth_count,head_eye_color) 替换并使用“计算属性”或值对象,例如

composed_of :head, mapping: [%w(head_teeth_count teeth_count), %w(head_eye_color eye_color)]

更少的表,更简单,更清晰的代码,更少的模型,没有意外的额外查询,更好的性能。

另一个例子:

用户(电子邮件)has_many :roles角色(姓名)

转换为用户(电子邮件,角色)

serialize :roles, Array

在这些情况下我错过了什么?

4

1 回答 1

4

语义,这实际上是编写优秀软件的一个非常重要的部分。

一本书不是由作者组成的。一本书一个作者。

我还要争辩说,您的示例更简单或更清晰的代码非常错误。性能改进值得商榷,而且可能微不足道。

你的最后一个案例特别糟糕。如果要搜索特定角色的所有用户怎么办?实例化所有用户,反序列化并一次检查一个?

于 2013-01-24T23:52:15.107 回答