我正在開發一個非常大的Rails應用程序。我們最初沒有使用過多的繼承,但我們從一位顧問那裏獲得了一些開眼界的經驗,並且正在考慮重構我們的一些模型。有多少班級太多? Rails STI
我們有下面的模式有很多在我們的應用:
class Project < ActiveRecord::Base
has_many :graph_settings
end
class GraphType < ActiveRecord::Base
has_many :graph_settings
#graph type specific settings (units, labels, etc) stored in DB and very infrequently updated.
end
class GraphSetting < ActiveRecord::Base
belongs_to :graph_type
belongs_to :project
# Project implementation of graph type specific settings (y_min, y_max) also stored in db.
end
這也導致在視圖中,幫手和在GraphSetting模型本身噸條件句。這一切都不好。
一個簡單的重構,我們得到有利於擺脫GraphType的使用結構更是這樣的:
class Graph < ActiveRecord::Base
belongs_to :project
# Generic methods and settings
end
class SpecificGraph < Graph
# Default methods and settings hard coded
# Project implementation specific details stored in db.
end
現在,這使我感覺良好,簡化了測試,消除條件語句,使後來的國際化更容易。但是我們只有15到30個圖表。
我們有一個非常相似的模型(以複雜的形式作爲例子),可能接近100種不同的'類型',並且可能會加倍。他們都會有他們繼承的關係和方法,有些需要重寫更多的方法,然後是其他方法。它看起來很完美,但很多人看起來很多。
200個STI課程對很多?我們應該看到另一種模式嗎?
感謝您的任何智慧,我會回答任何問題。
感謝您的回覆。在這一點上,我不認爲我們會有很多(如果有的話)數據庫中的空值,因爲屬性是相同的,只是值和方法會改變。 (例如它如何返回圖形的數據來繪製)。 如果我們結束了空字段(可能不是這個特定的實例,但其他類似的實例),我一定會牢記這一點。 – 2010-09-09 16:13:19
還有另一種類似的方法http://stackoverflow.com/questions/1634668/multiple-table-inheritance-vs-single-table-inheritance-in-ruby-on-rails/1634734#1634734 – 2010-09-09 16:59:06