【发布时间】:2015-09-02 18:47:53
【问题描述】:
我正在尝试将 Observable 项目传递到存储库层。
我有界面
public interface Repository{
IObservable<INotification<bool>> Save(IObservable<T> objects);
}
我在测试这个时遇到了麻烦,并且没有找到任何人做这样的事情的例子。
这种糟糕的设计 Rx 是否明智?我想保存一个结果流,并让存储库根据自己的语义缓冲它们。例如,存储库的实现由 Buffer() 控制。
这样做的部分动机是允许 save 方法在对象流关闭时缓冲/刷新最后一项。它可能会更频繁地这样做,但我不在乎更高级别。
编辑:
我对测试感到非常愚蠢,显然我是在模拟对可观察对象的特定实例的特定调用,如果我使用重放,甚至这样做,实际上是一个对象的新实例,导致我的模拟返回 null .
不过,我仍然对这种模式感到好奇。
【问题讨论】:
-
“我在测试这个时遇到了问题” - 遇到问题是因为/什么问题?
-
理论上是可以的。在实践中,它可能毫无用处,因为
IObservable很难用常见的 .NET 应用程序集成工具(WCF、OData 等)进行序列化,除非您打算在一个应用程序中使用此接口 -
是的,这违背了序列化的目的(我现在想要它,我的应用程序正在关闭!)因为
Observerable控制了完成的速度。 -
问题是如果我事先在 observable 上调用“do”,它会导致 Rx 抛出一个空异常“source is null”。实际调用 save 被嘲笑,并且似乎与可能更早地提取值有关,尽管我似乎无法使用 replay/publish/connect 来解决这个问题。 @paulpdaniels。你有什么建议吗?。我想使用 Observable 因为它提供了一个很好的信号,表明一切都已完成,这样我就不需要给接口一个“保存”方法。所以我可以在 save 的实现中改变缓冲,以及它如何持久化流入的数据流。
标签: c# system.reactive