我一直在使用 Rx 在单个应用程序中创建事件总线(想想 CQRS/ES),它似乎工作得很好。然而,在调查了一堆不同的事件溯源框架之后,我还没有看到使用过一次 Rx。与基于反射/容器的调度程序相比,它似乎非常适合,但也许我缺少一些东西。我宁愿不花很多时间在 3 个月内大获成功的事情上。Rx 不适合有什么原因吗?
谢谢,埃里克
我一直在使用 Rx 在单个应用程序中创建事件总线(想想 CQRS/ES),它似乎工作得很好。然而,在调查了一堆不同的事件溯源框架之后,我还没有看到使用过一次 Rx。与基于反射/容器的调度程序相比,它似乎非常适合,但也许我缺少一些东西。我宁愿不花很多时间在 3 个月内大获成功的事情上。Rx 不适合有什么原因吗?
谢谢,埃里克
Rx 绝对是一个出色的事件驱动和反应式编程框架。事实上,我会说将自己限制在IObservable
用于调度的接口实际上是比任何更重的重量更好的形式。然后,您自然会使用面向“消息传递”的风格,这种风格非常适合规模化和不变性。关注点分离变得很自然。
将来您可能会遇到的困难是您的系统是否超出了单个应用程序。Rx 在单个应用程序中非常简单,但是一旦您需要在应用程序之间添加“基础设施”,就需要付出一些努力。并不是说它不起作用!确实如此,当您为您的实例Subject
和IObservable
实例寻找不同的来源时——它只需要在某些情况下手动完成,而其他“事件溯源”框架(您的想法是什么?)可能有更大范围的外部“适配器” '。
关于通常以这种方式使用 Rx(即,在互联网上)。首先,请记住,除了 .NET 之外还有许多其他平台,Rx 不会出现在其中任何一个平台中。反应式风格可能会使用不同的名称。
如果您想在两个进程之间使用 RX,请查看:
所有这些库都在做同样的事情:它们实现了 Microsoft 的 IObservable 和 IObserver 接口。
如果您想在 .NET 中使用支持 Rx 的 In-Memory Bus,那么您应该查看MemBus。
另一种方法是MessageBus
从ReactiveUI使用。但是因为它没有在专用库中发布,所以您必须安装整个 ReactiveUI 库,这仅在 WPF 应用程序中有意义,而不是在旧版 WinForms 项目中。