我正在使用Ruby on Rails 3.2.9和Ruby 1.9.3。我有實施類似的方法爲,像下面的很多模型類:如何重構實現類似方法的模型類?
class ClassName_1 < ActiveRecord::Base
def great_method
self.method_1
end
def method_1 ... end
end
class ClassName_2 < ActiveRecord::Base
def great_method
result_1 = self.method_1
result_2 = self.method_2
result_1 && result_2
end
def method_1 ... end
def method_2 ... end
end
...
class ClassName_N < ActiveRecord::Base
def great_method
result_1 = self.method_1
result_2 = self.method_2
...
result_N = self.method_N
result_1 && result_2 && ... && result_N
end
def method_1 ... end
def method_2 ... end
...
def method_N ... end
end
這些模型類的行爲幾乎是相同的(不相同),因爲一些人的有一些不太以上方法的接口。所有方法都有不同的名稱(例如,method_1
可能被命名爲bar
和method_2
可能被命名爲foo
),所有返回true
或false
,在每個類中總是相同,並且它們之間沒有關係。
什麼是重構這些類的正確方法?
注:在這個時候,我想通過在每一個下面的模塊重構類:
module MyModule
def great_method
result_1 = self.respond_to?(:method_1) ? self.method_1 : true
result_2 = self.respond_to?(:method_2) ? self.method_2 : true
...
result_N = self.respond_to?(:method_N) ? self.method_N : true
result_1 && result_2 && ... && result_N
end
end
但我不知道這是否是完成的正確方法我在找什麼。此外,我不確定相關的優點和缺點...
您是否想過使用繼承?有一個主模型說'MainModel
不幸的是,最好的抽象可能取決於具體的領域模型,所以它將有助於獲得關於領域模型的更多細節。例如,每個課程中的「method_1」總是相同的? 'method_1'和'method_2'之間有什麼關係? –
@Vincent Paca - 我認爲繼承不是一件好事... – user12882