反应性扩展...在CRUD应用程序中的示例
我只是要处理Reactive Extensions,但仍然没有那个“A-Ha”时刻,这一切似乎都适合。因此,我需要一些帮助,并想知道在简单的CRUD程序中反应式扩展可能具有哪种角色。反应性扩展...在CRUD应用程序中的示例
有没有人有任何例子RX扩展如何帮助他们的CRUD应用程序。正如你可以想象的,我正在用C#编写一个CRUD应用程序......任何示例都被接受,并发布这个消息,以便我可以考虑RX如何适合我正在执行的编程类型。
也许你可能会列出一个编程任务如何从RX中受益,以及在使用RX之前如何完成任务。
如果你做静态CRUD(得到一个窗口/对话框与创建,读取,更新,写,无论),那么我想它可能只会帮助你在你的用户界面。例如,也许你想要某种自动完成某些输入。或者您必须查询服务才能显示其他信息。 然后RX可以帮你做到这一点。它会隐藏许多异步相关的困难,并为您提供可读,易读的表达式,您可以轻松阅读并快速完成这些表达。 在这个意义上,它只是用于用户界面/异步的LINQ相同
一个典型的CRUD应用程序有一些UI(winform,WPF等)和一个数据存储来获取数据并显示在用户界面中。这两个组件(UI和数据存储)之间的数据流可以使用Rx进行建模。
使用Rx,我们可以连接2个组件(UI和数据存储),例如: UI可以为创建,更新和删除(例如:在构造函数中传递给数据存储)提供3个可观察值。例如:可以将提交按钮事件映射为生成创建可观察值,以及类似地更新和删除。因此,基本上数据存储需要订阅这3个可观察对象,并且不需要打扰数据如何生成(这对UT也有帮助,因为您可以轻松创建伪观察对象)。
阅读将是一个简单的数据存储读取方法,因为这是关于拉取数据的需求。
所以基本上Rx已经作为一个抽象来组成2个组件。
也许我错了,考虑两个答案。 MS倾向于将他们的业务分成许多层,因为他们对此感兴趣。
CRUD是物理实现 - 创建 - 阅读 - ... 但UI似乎是合乎逻辑的 - 在上下文 - 用户...
有时候,你需要有一个层 - 经营业务层 - 控制流向RDMS的流量。 伊莫这是非常复杂的。
在财务业务中,“更新”或“删除”操作是使用新时间戳复制当前行。 这使得它很难有一个清洁的操作 - 物理至少... 而在此之上你可能会认为CRUD只是一个交易的一部分 - 在飞行中“飞行的逻辑单位”好 - 那你应该做一个COMMIT。
希望这会有所帮助...
我已经做了这样的事情,一直运作良好:
public interface IStorage : IDisposable
{
IObservable<int> GetOperationsCount(IScheduler scheduler);
IObservable<Node> FetchNodes(IObservable<NodeId> nodeIds, IScheduler scheduler);
IObservable<Node> StoreNodes(IObservable<Node> nodes, IScheduler scheduler);
}
它让我在后台线程执行取和商店,并有返回的值给我的UI线程上很容易。
每次致电StoreNodes
也建立一个交易,我可以从返回可观察到的任何错误。
我也用GetOperationsCount
观察的显示给用户的待处理操作的数量等
我,其中Rx个人经历让我想用它来做什么异步可言 - 事件,开始/结束调用,异步,任务,线程等。它使一切都适合一个模型,可以成为一个重要的代码保护程序。
CRUD应用程序将具有某种搜索功能。你可以实现一个文本框搜索“类型,然后等待搜索”就像在我的演示,我最近在我的博客中写道:
http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/
基本上使用油门和其他反应信息,您可以创建一个快速搜索功能。
谢谢卡斯滕。每当我看到RX的例子,我都会看到它在一个非常有限的局部范围内使用。即以消耗它的相同方法创建观察值。我想不出任何涉及更全球范围的RX应用。感谢您的评论。 – Pablo
是的,有一个更大的范围 - 我使用IObservable很多(虽然不需要RX)。它非常适用于IEnumerable,并且是一个更强大的事件。但在简单的CRUD场景中我看不到太多用处。当然,如果其他用户改变了数据或类似的东西,你可以使它通过WCF工作并更新你的用户界面,但这真的有用吗? – Carsten