gpt4 book ai didi

scala - 带有 akka : Providing implicit actorSystem to several layers 的蛋糕图案

转载 作者:行者123 更新时间:2023-12-04 10:04:12 27 4
gpt4 key购买 nike

我目前正在烘烤我的第一个蛋糕图案,所以请多多包涵。

我拿了我的工作单体应用程序,并将其切割成功能层。剪切看起来很干净,但导致两个层依赖于隐式 ActorSystem。

我试图像这样解决这种依赖关系:

trait LayerA {
this: ActorSystemProvider =>
private implicit val implicitActorSystem = actorSystem
import implicitActorSystem.dispatcher // implicit execution ctx
...
}

...同样适用于 LayerX

我的装配类看起来像:
class Assembly extends LayerA with LayerB with LayerX with ActorSystemProvider

其中 ActorSystemProvider 只是实例化了actor系统。

这不起作用,因为 ActorSystem解决依赖关系并实例化 val 时不存在,从而导致 NPE。这看起来也很丑陋,我相信必须有一种更好/更简单的方法来处理它。

使用蛋糕模式时,我应该如何处理层之间的共享隐式依赖关系,如 ActorSystem在这种情况下?

谢谢

最佳答案

自类型不是构建结 block 架构的要求,实际上我仅在特征是层的组件的情况下使用自类型。因此,当我需要在范围内放置一些隐式(例如用于 Spray Client 的 ActorRefFactory)时,我只需在其中混合一个特征:

trait ActorSystemProvider {
implicit def actorSystem: ActorSystem
}

在最低层(所谓的“世界末日”)我有以下代码结构:
trait ServiceStack
extends SomeModule
with SomeModule2
with SomeModule3
with ActorSystemProvider

object ServiceLauncher extends App with ServiceStack {
val actorSystem = ActorSystem("ServiceName")
}

这是一个过于简单的例子(如果你想要一个建立在蛋糕模式之上的真实系统的好例子,那么你绝对应该看看 Precog 系统, example 不同模块/层连接的地方),但不是你可以在需要时混合使用隐式 ActorSystem。

关于scala - 带有 akka : Providing implicit actorSystem to several layers 的蛋糕图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21464236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com