Ich habe jetzt ein paar Anwendungen geschrieben, die Scala-Darsteller verwenden, und ich bin daran interessiert, wie Menschen mit einigen der Probleme, auf die ich gestoßen bin, umgegangen sind.Schreiben von Anwendungen mit Scala-Darstellern in der Praxis
Eine Fülle von Nachrichtenklassen oder!?
Ich habe einen Akteur, der auf eine Benutzeroperation reagiert und etwas verursachen muss. Sagen wir es react
s zu einer Nachricht UserRequestsX(id)
. Ein fortwährendes Problem, das ich habe, ist, dass, weil ich meine Programme modularisieren möchte, ein einzelner Akteur allein nicht in der Lage ist, die Handlung zu vollenden, ohne andere Akteure zu involvieren. Angenommen, ich muss den Parameter id
verwenden, um eine Reihe von Werten abzurufen, und diese müssen dann über einen anderen Akteur gelöscht werden. Wenn ich ein normales Java-Programm geschrieben hat, könnte ich so etwas wie:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
, die einfach genug ist. Bei Verwendung von Schauspielern wird dies jedoch zu einem kleinen Problem, da ich vermeiden möchte, !?
zu verwenden. Ein Schauspieler reagiert auf die ReportTrades(date)
Nachricht, aber es muss eine PersistenceActor
für die Geschäfte und dann eine ReportActor
bitten, sie zu melden. Die einzige Art, wie ich dies zu tun gefunden habe, ist zu tun:
react {
case ReportTrades(date) =>
persistenceActor ! GetTradesAndReport(date)
}
so dass in meinem PersistenceActor
Ich habe einen Block reagieren:
react {
case GetTradesAndReport(date) =>
val ts = trades.get(date) //from persietent store
reportActor ! ReportTrades(ts)
}
Aber jetzt habe ich zwei Probleme:
- Ich muss zusätzliche Nachrichtenklassen erstellen, um die gleiche Anfrage (dh "Bericht Trades") zu repräsentieren. Tatsächlich habe ich drei in diesem Szenario, aber ich kann viel mehr haben - es wird ein Problem, das diese
- verfolgen. Wie soll ich die erste und dritte Nachricht
ReportTrades
nennen? Es ist verwirrend, sie beideReportTrades
zu nennen (oder wenn ich das tue, muss ich sie in separate Pakete setzen). Im Wesentlichen gibt es keineoverloading
eine Klasse vonval
Typ.
Gibt es etwas, das ich vermisse? Kann ich das vermeiden? Sollte ich einfach aufgeben und verwenden !?
Verwenden Menschen einige organisatorische Struktur, um zu klären, was vor sich geht?
Ist es sicher, direkt auf den persistenten Speicher in "reagieren" zuzugreifen? Ich dachte, du könntest keine blockierenden Operationen machen.Vielleicht wird "erhalten" für diesen bestimmten Schauspieler benötigt. –