Rails 一对多对多

sforce100 · 2012年11月13日 · 最后由 woaigithub 回复于 2012年11月14日 · 2670 次阅读

A->B(1..n),B->C(1..n) 现在由于 AB 内容相似度太高,所以希望 AB 做何二为一,直接 B 做内关联,用一个标记表示是 A 类型还是 B 类型。但是 C 再 B 中是必选的,但 A 对 C 是通过 B 间接关联,如果做 B 内关联,这里就发生矛盾了。

不明所以

真是程序员啊,例子都 A, B, C 的

#1 楼 @tumayun 就是 AB 内容都差不多,想整合成一个,但是遇到 BC 的一对多关系阻碍

原本 A 和 C 是没有关系的,只不过因为 B 中必有 C,A 中又有 B,A 就产生了与 C 的关系……像这样的逻辑,我是搞不懂为什么一定要把 A 和 B 合并起来,即便 A 和 B 的内容很相似,我依然认为应该分开,因为他们有一个关键属性不同(是否包含 C),而且这个属性的有无将会决定 A 和 C 的关系。

举个例子: A、B 是两个人,非常类似让人忍不住想把他们合并成一个类:人;但是后来发现其实 B 是 A 的儿子,这个关键属性造成了“人”这个类的抽象度可能有点高,可能应该抽象为“父母”和“子女”两个类; 这时候来了一个 C,本来 A 和 C 没啥关系,但是因为 C 其实是 B 的女儿,于是 C 就成了 A 的孙女……

不知道我理解的是否正确,个人觉得尽管 A 和 B(甚至包括 C)的内容很相似(都是人),但就是因为关系的存在导致不宜做太高层次的抽象。如果一定要合并,那还不如真的做一个更高次抽象,然后继承扩展它们。

#3 楼 @sforce100 既然是问问题,为什么不把这些说清楚让人容易回答你的问题呢?就用你应用本来的 model 就好了,没有人会因为这个模仿你的。

#5 楼 @knwang 以后会注意的,用具体,只是感觉用 ABC 好表示

看不懂,也有点不想看了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号