在EM.defer中运行时包含回调和errback是否有意义?

时间:2013-08-12 18:00:27

标签: ruby eventmachine

我正在尝试在EventMachine中集成一些阻塞库/操作,我考虑将这些代码封装在包含EM :: Deferrable的类中。在Deferrable对象中使用这样的代码是否有意义:

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)

就个人而言,我更喜欢第一个,因为对我而言,它看起来更好一点。在这种情况下实施可推迟是否有意义?

1 个答案:

答案 0 :(得分:2)

你的第一个实现对我来说看起来更多OOP。使用lambdas非常棒且非常灵活,但是如果事情开始变得复杂,你最终会得到一堆随机的lambdas并且无法分辨它们实际上在做什么。

要回答您的问题,是的,创建一个运行阻止代码的类是有道理的。

此外,您还可以放置与阻止操作逻辑相关的所有私有方法。

最后,如果你认真对待你的课程,任何开发人员都不难理解该课程背后的基本理念。如果需要进一步的信息,他只需要深入研究代码。

我认为lambdas在这种情况下是一个糟糕的设计。非常肯定,当事情变得更加复杂时,你会感谢自己使用课程(它总是如此)。