在现有代码中实现反应模式

时间:2018-06-23 17:39:44

标签: rx-java observable reactive-programming system.reactive

我正在尝试在现有应用程序中实现反应模式。

所以我从DAO层开始。与任何其他DAO层一样,当前实现通过使用JPA从数据库中获取实体列表。

@Query(value = "SELECT e from MyEntity e WHERE....")
List<MyEntity> getMyEntities();

现在,我可以从列表中进行观察了。

但是Observable是一个异步的数据流,它可以动态推送数据/事件。但是在这种情况下,列表已经完成。

那么在这种用例中,我将从反应模式中获得什么好处?

1 个答案:

答案 0 :(得分:0)

我认为您看错了这条路。您本质上是在问这样的事情:“因此,我从数据库中提取了一些数据,并将其返回为一个集合。如果我将该集合的数据类型从可枚举更改为可观察,那么这对您有什么好处?”显然,它没有任何好处。

在模型中,您有一个“必须”定义的程序。该程序专门要求提供有关更改的信息,命令您的对象模型将这些更改添加到其多边形结构中,命令数据库在必要时进行存储,命令屏幕在加载时进行渲染,等等。

相反,反应模型是事物对变化做出反应的声明式表达。您可以通过声明为与鼠标移动事件结合在一起的鼠标移动事件的函数来完成此操作。多边形被声明为这些东西的函数。图片是多边形的功能。将数据库存储事件声明为与UI保存事件结合使用的图片功能,就像多边形是不同鼠标事件流的功能一样。图片也是加载事件的功能。屏幕更新是图片等功能

您必须完全改变对“程序”的看法。在反应模型中,加载图片事件将导致加载多边形和屏幕更新的事件流,所有这些事件都可能与鼠标绘制事件同时发生。所有这些都是由于如何声明域模型中的事物而发生的。屏幕上出现的图片自然会从声明声明加载事件和屏幕更新事件的声明中自然消失。如果加载的是一幅包含数百万个多边形的庞大而详细的图片,则可以做出响应,您可以分页或流式传输负载,并让负载继续进行,同时用户可以与之并行交互。