私は非常に大きなRailsアプリケーションに取り組んでいます。当初はあまり継承を使用していませんでしたが、コンサルタントから目を見張るような経験があり、モデルの一部をリファクタリングすることを検討しています。
このアプリケーションには、次のパターンがたくさんあります。
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に近い「タイプ」を持つ非常に類似したモデル(例として使用するのは複雑)があり、それを2倍にする可能性があります。それらはすべて、継承した関係とメソッドを持ち、一部のメソッドは他のメソッドよりも多くのメソッドをオーバーライドする必要があります。それは完璧な使い方のように思えますが、その多くはただたくさんのように思えます。
200のSTIクラスは多くの人にありますか?私たちが見なければならない別のパターンはありますか?
知恵をありがとう、そして私はどんな質問にも答えます。