gpt4 book ai didi

c# - 如何避免在 RX 中使用 Subjects

转载 作者:可可西里 更新时间:2023-11-01 08:22:30 25 4
gpt4 key购买 nike

所以我一直在到处阅读 Subject<T> 的用法是“坏的”——我有点同意这个推理。

但是,我正在尝试想出避免使用它的最佳方法并举一个例子。

目前我有一个抽象类用于我的持久化配置类,它有一个 protected Save()每当更改属性时调用它的方法应该持久化该类。此消息将消息发送到 Subject<T>通过 IObservable<T> 暴露序列化服务监听和序列化类的接口(interface)。这在当时看来是最明显、最简单、最快捷的实现方式。

那么不使用 Subject 的 RX 方法是什么?我会改为公开事件并使用 Observable.FromEventPattern() 吗?订阅它? - 因为这似乎是一种更复杂的方法。

最佳答案

与其说是使用 Subject<T>不好 - 必须有某种方式“进入 monad” - 这就是说 “获得 IObservable<T> 的学术方式。你需要从某个地方开始。

Subject<T> 的问题当它从订阅中使用而不是将现有的可观察对象链接在一起时会出现更多。主题应该只存在于您的 Rx 机制的边缘。

如果提供的入口点(例如 FromEventFromEventPatternFromAsyncReturnToObservable() 等)都不适合您,则使用 Subject<T>是完全有效的。并且没有必要为了方便使用上述之一而增加额外的复杂性——无论如何,它们中的大多数都在幕后使用主题或类似主题的结构。

在你的情况下,听起来像 Subject<T>就好了。你可能会看看通过 AsObservable() 公开它为了隐藏实现细节。

关于c# - 如何避免在 RX 中使用 Subjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com