Re: T▽T
「寫得很隨意的」
date Thu, May 1, 2008 at 10:37 PM
subject Re: T▽T
真的是很怪!但是這樣真的才是對的。
也許可以這樣說,自然語言中的「擁有」其實是語意不清的。
我說我有這張 CD, 我指的是這張 CD 的音樂,
還是這張 CD 的 copy?「擁有」後面的受詞,
是獨一無二的還是可以被共有的?沒有說明。
但是在 Rails 裡的 has_one, 後面接的東西,
一定要是「獨一無二」的,不能是共有的東西。
其實可以這樣說,has_one 和 belongs_to 根本就不是
從屬語意,照字面上看是會被誤導的...
我個人覺得應該改個名字
至少 belongs_to 換成 belongs_to_one
*
relational database 無法跟 OO 一對一對應,
最多只能做到 OO 的子集而已,而且是很小的子集...
遊戲的 OO model 可複雜了 -_-b
想用 relational database 去 model 我覺得幾乎不可能
不然就是要繞很多圈...
像是 has_many :through 就算解決了一部份多對多關係的問題
*
事實上,has_one 只是幫你增加幾個 method 而已
真正有作用的是 belongs_to,
他會在你的那個 model 裡面多增加一個 foreign key,
(不過要自己加,我覺得要有另外一個 migration 體系可以直接 reflect model)
假設他是 belongs_to :user,
則他的 table 裡會多個 user_id,
表示他這筆資料是「屬於」哪個 user 的
也就是說,他的「主人」必須是獨一無二的,
不能有兩個以上的主人...
這造成了 theme 去擁有 user,
而 user 屬於 theme...
因為獨一無二的是 theme 而不是 user,
user 會有很多 copy XD
2 retries:
回應 "relational database 無法跟 OO 一對一對應"這句話,Active Record 只是一種 ORM pattern,它將 doamin object 與資料庫操作混在一起,本來就並不適合複雜的情況。
建議可以看看 Patterns of Enterprise Application Architecture, by Martin Fowler 一書 http://martinfowler.com/eaaCatalog/ 。
感謝資訊!
有機會會找來看看的 :)
Martin Fowler 的文章我覺得滿容易讀的
Post a Comment
Note: Only a member of this blog may post a comment.