Я работаю над очень большим приложением 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 занятий по ИППП? Есть ли еще одна закономерность, на которую мы должны обратить внимание?
Спасибо за любую мудрость, и я отвечу на любые вопросы.