Ich backe gerade mein erstes Kuchenmuster, also bitte tragen Sie mit mir.Kuchenmuster w/akka: Impliziertes actorSystem mehreren Schichten zur Verfügung stellen
Ich nahm meine monolithische App und ich schnitt sie in funktionelle Schichten. Der Schnitt sieht sauber aus, führt jedoch zu zwei Schichten, die von einem impliziten ActorSystem abhängen.
Ich habe versucht, diese Abhängigkeit so zu lösen:
trait LayerA {
this: ActorSystemProvider =>
private implicit val implicitActorSystem = actorSystem
import implicitActorSystem.dispatcher // implicit execution ctx
...
}
... und in ähnlicher Weise für LayerX
Meine Montag Klasse wie folgt aussieht:
class Assembly extends LayerA with LayerB with LayerX with ActorSystemProvider
wo ActorSystemProvider einfach instanziert die Schauspieler System.
Dies funktioniert nicht, da ActorSystem
nicht existiert, wenn die Abhängigkeiten aufgelöst und die Werte instanziiert werden, was zu einer NPE führt. Das sieht auch sehr hässlich aus und ich bin mir sicher, dass es einen schöneren und einfacheren Weg geben muss, damit umzugehen.
Wie sollte ich mit geteilten impliziten Abhängigkeiten zwischen den Schichten umgehen, wenn Sie das Kuchenmuster verwenden, wie in diesem Fall ActorSystem
?
Dank
@Alexv Ich verstehe nicht, wo Sie 'ActorSystemProvider' verweisen - wie ich dann auf das' actorSystem' von einem internen Merkmal wie 'myInternalCalculator' zugreifen, es wird tief in der Aufrufhierarchie verwendet. – Jas
@Jas Es sieht so aus, als sollte es "mit ActorSystemProvider" anstelle von "ActorRefProvider" sein. Dann können Sie es in etwas ähnlich wie 'ServiceLauncher' initiieren – 4lex1v