私は今、scalaアクターを使っていくつかのアプリケーションを書いています。私は遭遇したいくつかの問題に人々がどのように近づいたり対処しているかに興味があります。Scalaアクターを使ったアプリケーションの実際の作成
多すぎるメッセージクラスまたは!
私はユーザーの操作に反応して何かを起こさなければならない俳優があります。メッセージUserRequestsX(id)
にreact
を書き込んでみましょう。私が続けている問題は、自分のプログラムをモジュール化したいので、1人の俳優だけが他の俳優を関与せずにアクションを完了できないということです。たとえば、id
パラメータを使用して複数の値を取得する必要があるとし、これらの値を他のアクタから削除する必要があるとします。私が普通のJavaプログラムを書いていたら、私は次のようなことをするでしょう:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
これはどれも簡単です。しかし、私は!?
の使用を避けたいので、俳優を使用するとこれは少し痛みになります。 1人の俳優はReportTrades(date)
メッセージに反応しますが、取引についてはPersistenceActor
に質問し、次にReportActor
に報告する必要があります。私はこれを行うための見つけた唯一の方法は、実行することです。
react {
case ReportTrades(date) =>
persistenceActor ! GetTradesAndReport(date)
}
私PersistenceActor
に私はブロックに反応しているようにするため:
react {
case GetTradesAndReport(date) =>
val ts = trades.get(date) //from persietent store
reportActor ! ReportTrades(ts)
}
しかし、今、私は2つの問題を抱えて:
-
を
- を同じメッセージ(つまり「レポート取引」)を表すように追加のメッセージクラスを作成する必要があります。実際にはこのシナリオでは3つありますが、それ以上の問題が発生する可能性があります。
ReportTrades
とは何ですか。それらを両方ともReportTrades
と呼ぶのは混乱します(もしそうであれば、別々のパッケージに入れなければなりません)。基本的にクラスのようなものはval
タイプではありません。
紛失しているものがありますか?これを避けることはできますか?私はちょうどあきらめて使うべきですか?!?
何が起こっているのかを明確にするために組織の構造を使用していますか?
「反応する」で永続ストアに直接アクセスすることは安全ですか?私はあなたがブロック操作を行うことができないと思った。その特定の俳優には「受け取り」が必要かもしれない。 –