gpt4 book ai didi

c# - Reactive Extension 中的数据服务

转载 作者:行者123 更新时间:2023-11-30 16:54:09 24 4
gpt4 key购买 nike

我想要一个通用类,用于数据处理创建、更新和删除的内存缓存。底层模型继承自具有字符串类型 Id 的接口(interface)。

interface IModel
{
string Id { get; }
}

处理创建和更新很容易。例如,如果我想订阅流并填充字典,我知道如果模型 ID 不存在则需要创建,否则就是更新。

我的问题是:
您将如何在不引入另一个类来包装我的模型的情况下处理删除?我想保留一个 IObservable<TModel> , 而不是像 IObservable<Event<TModel>> 这样的东西或 IObservable<Pair<string, TModel>> ,但我不知道如何。这可能吗?

interface IDataService<TModel>
{
IObservable<TModel> DataStream { get; }
}

最佳答案

正如@Enigmativity 建议的那样,您可以使用嵌套的可观察序列来解决这个问题。这在 Sequences of coincidence 中有所涉及。 IntroToRx 中的部分。

这将如何运作?

您可以将嵌套序列想象成二维数组,或者更具体地说是 jagged array。 .外部序列是内部序列的容器。内部序列的到来代表一个模型的创建

interface IDataService<TModel>
{
IObservable<IObservable<TModel>> DataStream { get; }
}

一旦你有了一个内部序列,它产生的所有值都是更新(除了第一个)。内部序列只会为单个 id 生成更新。当内部序列完成时,代表一个删除

此模式适用于各种用例,如上面链接的初始段落中所述。

作为弹珠图,您会得到如下所示的内容。每行代表一个内部序列。

m1  1---2----3--|
m2 a----|
m3 x----y---z--

这将导致以下逻辑流程:

  1. 创建状态为'1'的m1
  2. 创建状态为'a'的m2
  3. 用值“2”更新 m1
  4. 创建值为 'x' 的 m3
  5. 删除m2
  6. 用值“3”更新 m1
  7. 用值 'y' 更新 m3
  8. 删除 m1
  9. 用值“z”更新 m3

关于c# - Reactive Extension 中的数据服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800380/

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