2013-08-12 3 views
1

EventMachine에서 일부 차단 라이브러리/작업을 통합하려고하는데 EM :: Deferrable이 포함 된 클래스 내에 이러한 코드를 캡슐화하는 방법을 고려했습니다.EM.defer 내부에서 실행할 때 콜백 및 오류 복구를 포함시키는 것이 합리적입니까?

class Whatever 
    include EM::Deferrable 
    def some_operation 
    result = some_blocking_operations 
    if result.considered_success? 
     succeed(result) 
    else 
     fail(result) 
    end 
    end 
end 

또는 그냥에 충실해야 : 개인적으로

op = lambda do 
    result = some_blocking_operations 
end 

cb = lambda do |res| 
    # do some kind of if here to check if it's success or failure 
end 

EM.defer(op,cb) 

, 내가 나를 위해 그것을 조금 더 읽어 이후, 첫 번째를 선호 그것은 지연 가능 객체에서 이러한 코드를 가지고 의미가 있는가 . 이런 경우 연기가 가능하다면 의미가 있습니까?

답변

2

첫 번째 구현은 나에게 더 많은 OOP가 될 것입니다. 람다를 사용하는 것은 훌륭하고 매우 유연합니다. 그러나 일이 복잡해지기 시작하면 무작위 람다 (lambdas)가 많아지고 실제로 무엇을하고 있는지 말할 방법이 없습니다.

질문에 답하기 위해 차단 코드를 실행할 클래스를 만드는 것이 좋습니다.

또한 차단 조치 논리와 관련된 모든 개인 방법을 지정할 수 있습니다.

마지막으로, 클래스의 이름을 간결하게 지정하면 개발자가 그 클래스의 기본 아이디어를 이해하는 것이 어렵지 않습니다. 추가 정보가 필요하다면, 그는 코드에 들어가야 할 것입니다.

나는이 경우 람다가 좋지 않은 디자인이라고 생각한다. 일이 더 복잡해질 때 수업을 사용하는 것에 대해 감사 할 것입니다 (항상 그렇습니다).

+0

간단하면 람다를 사용하여 연기 할 수있는 복잡한 리팩터링을 시작할 때 – bbozo