저는 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
그 모델 클래스가 거의 같은 (하지 같은) 동작들 중 일부는 좀 덜 이상의 방법과 인터페이스를 가지고 있기 때문에 : 나는 다음과 같이 같은 유사한 방법을 구현하는 많은 모델 클래스가 있습니다. 모든 메서드의 이름이 다르게 지정되어 있습니다 (예 : 은 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