私はかなり頻繁に俳優に直面する問題を抽象化し、それを解決するための共通のデザインパターンを許可します。Akka兄弟再帰ActorRefの必要条件
── user
└── ServiceActor
├── TicketManager
│ ├── WorkerA
│ ├── WorkerB
│ └── WorkerC
└── UserManager
├── WorkerA
├── WorkerB
└── WorkerC
チケットやユーザーマネージャは、重要ではありません。次のアクター階層があるとします。私は、TicketManagerがUserManagerにメッセージを送り、その逆を行うという要件を持っています。 (これらは私が使用した例の名前に過ぎず、実際の問題を代表するものではありません)
次のうちどれが最適ですか?
オプション1:
TicketManagerコンストラクタは、コンストラクタの引数としてのUserManagerを取ります。 UserManagerコンストラクタは、TicketManagerをコンストラクタ引数として受け取ります。 しかし、両方ともお互いに再帰呼び出しを行うことはできません。したがって、これはおそらく不可能です。
オプション2:
UserManagerがactorSelectionとしてactorSelection(「../ TicketManager」)を介してTicketManagerを参照するなど要件に、または一度だけ起動時に、それを維持します。
オプション3:時間の任意の時点で
、のUserManager/TicketManagerは、それらの他の兄弟を参照するための親(ServiceActor)を要求し、親がその参照を保持するように適切actorRefバック返信されます。
オプション4:
この状況は決してありませんか?何らかの形でデザインを「複雑にする」ように、お互いに話し合っている兄弟はないと思いますか?木のような階層があればいいですか?そのような場合にそれを避けるのに役立つ共通のデザインパターンは何ですか?
私は要件を明確にしたいと考えています。必要に応じてさらに明確にすることを許可してください。
すなわち初期化戦術は、エドモンドによって提案された洞察に満ちたもののだろう、私はオプション4とオプションの混合物をやってしまいました3.私の俳優階層の混乱を解くオプション4。それを超えて、お互いに話す必要がある瞬間、彼らは親を介して話しました。それは合理的なパターンだと思う。 – Ra41P