3 回答

TA貢獻1815條經(jīng)驗 獲得超10個贊
Rails中的單表繼承
簡而言之:對象之間需要有明確的OO風(fēng)格的繼承關(guān)系(由womble雄辯地說明),而不僅僅是一些共享數(shù)據(jù)。如果沒有自然而明顯的類層次結(jié)構(gòu),隨著應(yīng)用程序的發(fā)展,STI設(shè)計可能會變得難以維護。
其次,您應(yīng)該考慮將所有數(shù)據(jù)放在一個表中是否很重要。使用多態(tài)關(guān)聯(lián),您的數(shù)據(jù)庫查詢將變得更加復(fù)雜,并且可能更慢。如果您計劃在網(wǎng)站上列出所有對象(例如,在表格中),那么STI可能就是您的選擇。
第三,確保您的子類沒有太多的唯一屬性。使用一個表中的所有數(shù)據(jù),您不需要很多非全局列。這些不僅會占用空間(不是主要問題),而且會使數(shù)據(jù)結(jié)構(gòu)混亂。如果您有“特殊”列,則應(yīng)在代碼中明確解釋它們。
最后,如果您使用STI,我強烈建議您為所有子模型使用單個控制器??刂破鞯闹饕δ苁翘峁ο蟮脑L問,如果需要以非常不同的方式訪問對象,那么STI可能不是開始時的正確設(shè)計選擇。

TA貢獻1719條經(jīng)驗 獲得超6個贊
我可能會使用STI或根本沒有特殊功能。您可以將所有內(nèi)容稱為“個人檔案”,如果用戶為零則您知道它是否為“機器人”。您也可以在不使用STI的情況下存儲“類型”字段。
某些事情會影響我使用STI的決定:
是否存在特定于機器人的邏輯
有多少機器人與用戶配置文件(少數(shù)機器人意味著STI是好的 - 很多機器人,我可能會將它們存儲在其他地方)
避免STI的原因有時會妨礙你。例如,將對象從一種類型更改為另一種類型(在這種情況下為Bot到配置文件)可能相當(dāng)煩人。有時一個簡單的“類型”字段更好。
值得注意的是,如果使用STI,您可能需要一個公共基類。所以,你可能希望Profile
,BotProfile
和UserProfile
。這些名字取決于你。:)
- 3 回答
- 0 關(guān)注
- 557 瀏覽
添加回答
舉報