RX受试者 - 他们应该避免吗?

Ser*_*hov 24 system.reactive

我在另一个主题对这个主题进行了一次小型讨论,并希望人们对主题的"坏"方面提出意见.

频繁参与RX论坛的人都知道E.Meijer不喜欢受试者.虽然我对RX创作者的观点有最深刻的敬意,但我已经在多个项目中广泛使用了Subjects几年,并且因为它们没有任何架构问题或错误.

我可以命名的主题的唯一"陷阱"是它们不是"可重用的" - 在完成主题上的可观察对象之后,您需要在新订阅者可以从其接收事件之前重新实例化它.

"代码味道"和"不喜欢它们"需要"实用"示例支持 - 您是否可以引起我们注意使用主题可能导致错误或问题的可能情况?或许你认为它们完全是容易和无害的 - 然后尝试定义它们将被使用的区域.

Ana*_*tts 26

Erik Meijer正在以纯粹的功能方式思考 - 主题是Rx的可变变量.因此,在一般用法中他是对的 - 使用主题有时是一种在功能上消除思维的方法,如果你使用它们太多,你就试图排在上游.

然而!当您与.NET的非功能世界接口时,主题非常有用.包装事件或回调方法?主题很棒.试图将Rx"接口"放到某些现有代码上?使用主题!

  • 听起来很合理.除了我建议已经有方法来包装事件,即Observable.FromEvent(模式),它再次更受主题的影响. (3认同)
  • 我相信他并不仅仅意味着简单地包装事件和异步调用,而是使用来自它们的数据.例如,包装`BeginRead` /`EndRead`对异步调用--`EndRead`只返回读取的字节数,以获取您必须访问传入`BeginRead`的可变字节数组的实际数据. (2认同)

小智 6

好像许多评论者都在互相交谈.

上次我使用Subject时,我需要在初始化调用中将委托传递给中间件,以便在发生事件时可以回复我.代表有熟悉的事件args签名,但我无法使用FromEvent,因为没有事件.

我并没有感到难过 - 我没有看到任何其他选择.

基本上我只在我发起一些事件并将它放入Rx世界时,或者当我需要一个尚未到达的未来订户的句柄时才使用Subjects.主题让我把我现在拥有的东西链接到后来的订阅者.