我看到的大多数示例(如果不是全部)都是一种执行某种计算和完成的函数。在这方面,FP闪耀。但是,我很难看到如何在企业应用程序环境的上下文中应用它,在这种情况下,没有太多的算法进行,并且有大量的数据传输和服务。
所以我想问一下如何在FP风格中实现以下问题。
我想实现一个事件总线服务。该服务有一个register
方法用于注册监听器,publish
用于发布事件。
在OO设置中,这是通过使用两种方法创建EventBus接口来完成的。然后,实现可以使用列表来保存由register
更新并在publish
中使用的侦听器。当然这意味着register
会产生副作用。 Spring可用于创建类并将其实例传递给事件的发布者或订阅者。
如果事件总线服务的客户端是独立的(例如,并非所有客户端都是以“test”方法创建的),如何在FP中对此进行建模?据我所知,这否定了使寄存器返回EventBus的新实例,因为其他客户端已经拥有对旧实例的引用(例如,发布到它只会发布给它知道的监听器)
我更喜欢在Scala中使用解决方案。
答案 0 :(得分:4)
我认为你应该仔细研究功能反应式编程技术。由于你想要Scala中的东西,我建议阅读Ingo Maier,Tiark Rompf和Martin Odersky撰写的Deprecating The observer pattern论文。
答案 1 :(得分:0)
解决方案的草图是发布应返回IO[Unit]
。听众应该是迭代者。注册也会返回IO[Unit]
。