私は現在、scala アクターを使用していくつかのアプリケーションを作成しており、私が遭遇した問題のいくつかに人々がどのようにアプローチしたり対処したりしたかに興味があります。
大量の Message クラスまたは !?
ユーザー操作に反応し、何かを起こさなければならないアクターがいます。reactそれをメッセージにしましょうUserRequestsX(id)。私が抱えている継続的な問題は、プログラムをモジュール化したいため、1 つのアクターだけでは、他のアクターを巻き込むことなくアクションを完了できないことです。たとえば、idパラメーターを使用して一連の値を取得する必要があり、これらを他のアクターを介して削除する必要があるとします。普通の Java プログラムを書いていたら、次のようなことをするかもしれません:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
これは簡単です。ただし、アクターを使用するのは少し面倒です。使用を避けたいからです !?。1 つのアクターがメッセージに反応しますが、取引をReportTrades(date)依頼してから報告する必要があります。これを行うために私が見つけた唯一の方法は、次のことです。PersistenceActorReportActor
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 つありますが、もっと多くある可能性があります。これらを追跡するのは問題になります。
- 1 番目と 3 番目のメッセージは何と呼べばよい
ReportTradesですか? それらを両方と呼ぶのは紛らわしいReportTradesです (または、そうする場合は、それらを別々のパッケージに入れる必要があります)。overloading本質的に、型によるクラスのようなものはありませんval。
足りないものはありますか?これを避けることはできますか?あきらめて使用する必要があり!?ますか?