1

我正在尝试在 EventMachine 中集成一些阻塞库/操作,并且我考虑将此类代码封装在包含 EM::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)

就个人而言,我更喜欢第一个,因为对我来说它读起来更好一些。在这种情况下实施 deferable 是否有意义?

4

1 回答 1

2

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

要回答您的问题,是的,创建一个类来运行您的阻塞代码对我来说是有意义的。

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

最后,如果您仔细命名您的类,任何开发人员都不会难理解该类背后的基本思想。如果需要更多信息,他只需要深入研究代码即可。

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

于 2013-08-17T15:01:11.997 回答