2016-09-19 3 views
0

리팩터링하는 가장 좋은 방법은 무엇입니까? 많은 반복 코드가 없습니까? 나는 주로 메소드의 템플릿을 가지고 있으며 오직 하나의 부분 만이 모든 분리 된 메소드에 대해 변경된다. 리팩토링하는 방법이 있다고 생각합니다.리팩터링, 아마도 블록을 사용하고 있습니까? 또는 Proc? 메소드의 대부분을 실행하는 방법은 하나의 작은 부분을 변경하십시오.

1 단계는

def method3 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method3(t,field_name) 
    end 
end 

단계 후 다음

def method2 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method2(t,field_name) 
    end 
end 

3 단계 실행을 실행

def method1 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method1(t,field_name) 
    end 
end 

단계 2 요구 사항을 실행하는 데 필요한 4 마지막

def method4 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method4(t,field_name) 
    end 
end 

이 블록을 위해 무엇 있다는

def method1 (title,field2) 
    t=title.to_s 
    field2.each do |f| 
     field_name =f.to_s 
      sub_method1(t,field_name) 
      sub_method2(t,field_name) 
      sub_method3(t,field_name) 
      sub_method4(t,field_name) 
    end 
end 

답변

2

작동하지 않습니다. 떠나있는 동안 당신이 필요로하는 각 단계에 대한 하나의 호출을 할 수 있습니다

method(title, field) { |t, f| submethodX(t, f) } 

이 방법을, 그리고 전화 사이트에있는 블록을 통해 변화하는 코드를 삽입 :

def method(title, field) 
    field2.each { |field| yield(title.to_s, field.to_s) } 
end 

그런 다음이처럼 메소드를 호출 할 수 method의 정의에서 공유 코드.