Я работаю над очень большим 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 различными «типами», и потенциально она может удвоиться.Все они будут иметь отношения и методы, которые они унаследовали, некоторые должны будут переопределить больше методов, чем другие.Кажется, что это идеальное использование, но многие из них кажутся очень полезными.
Много ли 200 ИППП классов?Есть ли другой шаблон, на который нам следует обратить внимание?
Спасибо за мудрость, и я отвечу на все вопросы.