我正在尝试在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)
就个人而言,我更喜欢第一个,因为对我而言,它看起来更好一点。在这种情况下实施可推迟是否有意义?
答案 0 :(得分:2)
你的第一个实现对我来说看起来更多OOP。使用lambdas非常棒且非常灵活,但是如果事情开始变得复杂,你最终会得到一堆随机的lambdas并且无法分辨它们实际上在做什么。
要回答您的问题,是的,创建一个运行阻止代码的类是有道理的。
此外,您还可以放置与阻止操作逻辑相关的所有私有方法。
最后,如果你认真对待你的课程,任何开发人员都不难理解该课程背后的基本理念。如果需要进一步的信息,他只需要深入研究代码。
我认为lambdas在这种情况下是一个糟糕的设计。非常肯定,当事情变得更加复杂时,你会感谢自己使用课程(它总是如此)。