我希望有一个用于数据处理创建,更新和删除的内存缓存的泛型类。底层模型继承自Id为string类型的接口。
interface IModel
{
string Id { get; }
}
处理创作&更新很容易。例如,如果我想订阅流并填充一个Dictionary,我知道如果模型Id不存在则需要创建,否则它是一个更新。
我的问题是:
你如何处理删除而不引入另一个类来包装我的模型?我想保留一个IObservable<TModel>
,而不是IObservable<Event<TModel>>
或IObservable<Pair<string, TModel>>
,但我不知道如何。这可能吗?
interface IDataService<TModel>
{
IObservable<TModel> DataStream { get; }
}
答案 0 :(得分:2)
由于@Enigmativity建议您可以使用嵌套的可观察序列来解决此问题。 IntroToRx的Sequences of coincidence部分已触及此内容。
您可以将嵌套序列视为二维数组,或者更具体地说是jagged array。 外部序列是内部序列的容器。 内部序列的到达表示模型的创建。
interface IDataService<TModel>
{
IObservable<IObservable<TModel>> DataStream { get; }
}
一旦你有一个内部序列,它产生的所有值都是更新(第一个除外)。 内部序列只会为单个ID生成更新。 当内部序列完成时,代表删除。
此模式适用于各种用例,如上面链接的初始段落所述。
作为大理石图,您将拥有以下内容。 每行代表一个内部序列。
m1 1---2----3--|
m2 a----|
m3 x----y---z--
这将导致以下逻辑流程: