2013-09-24 6 views
1

다른 여러 객체에 대한 부모 객체 역할을하는 객체가 있습니다.Ruby - 여러 유형의 오류를 처리하기위한 리팩터링

class Parent 
    def commit 
    begin 
    ... 
    rescue => e 
    ... 
    end 
    end 
end 

class ChildA < Parent 
end 

class ChildB < Parent 
end 

그러나, ChildAcommit 오류, UniqueError의 특정 유형을 던져 때 독특한 방식으로 행동해야합니다 : 그것은이 방법과 유사한 방법이있다. 그 함수에 대해 전체 commit 파일을 덮어 쓸 수는 있지만 어색함을 느낍니다. begin 섹션에서 본문을 변경해야하는 경우 문제가 발생하도록 설정합니다. 이제 두 곳에서 변경해야하므로 문제가됩니다.

리팩토링하는 가장 확실한 방법은 무엇입니까?

답변

4

모든 유형의 예외는 rescue => e입니다. 이 코드 줄은 거의 존재하지 않아야합니다. 예외 처리기는 의미있는 복구가 가능한 예외 유형 만 캡처해야합니다.

은 모든 예외를 삼키지 않도록 당신의 부모를 변경 한 다음 하위 클래스에서 그들을 잡을

: 나는 일관된 방법에에서 구출해야 할 일 개 알려진 예외가

class Parent 

    def commit 
    # ... 
    end 

end 

class Child < Parent 
    def commit 
    begin 
     super 
    rescue UniqueError => e 
     # ... 
    end 
    end 
end 
+0

어떤 경우 부모 클래스, 예. 'ActiveRecord :: ResourceNotFound'에서 구출? 하나의 오류에서 구출하는 부모를 가질 수 있으며 어떻게 든 그것을 Child 클래스에서 확장 할 수 있습니까? – Bryce

관련 문제