Ora ho scritto alcune applicazioni utilizzando attori di scala e sono interessato a come le persone si sono avvicinate o hanno affrontato alcuni dei problemi che ho incontrato.Scrivere applicazioni con attori di Scala in pratica
Una pletora di classi di messaggi o!?
Ho un attore che reagisce a un'operazione dell'utente e deve causare qualcosa. Diciamo che è react
s a un messaggio UserRequestsX(id)
. Un problema continuo che ho è che, poiché voglio modularizzare i miei programmi, un singolo attore da solo non è in grado di completare l'azione senza coinvolgere altri attori. Ad esempio, supponiamo di dover utilizzare il parametro id
per recuperare un gruppo di valori e quindi questi devono essere eliminati tramite qualche altro attore. Se stavo scrivendo un normale programma Java, potrei fare qualcosa del tipo:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
Che è abbastanza semplice. Tuttavia, usando gli attori questo diventa un po 'un dolore perché voglio evitare di usare !?
. Un attore reagisce al messaggio ReportTrades(date)
ma deve chiedere un PersistenceActor
per le transazioni e quindi un ReportActor
per segnalarli. L'unico modo che ho trovato per farlo è quello di fare:
react {
case ReportTrades(date) =>
persistenceActor ! GetTradesAndReport(date)
}
Così che nel mio PersistenceActor
ho un blocco di reagire:
react {
case GetTradesAndReport(date) =>
val ts = trades.get(date) //from persietent store
reportActor ! ReportTrades(ts)
}
Ma ora ho 2 problemi:
- Devo creare classi messaggio aggiuntive per rappresentare la stessa richiesta (ad esempio "report delle negoziazioni"). In effetti ho tre in questo scenario ma potrei averne molti altri - diventa un problema tenere traccia di questi
- Cosa dovrei chiamare il primo e il terzo messaggio
ReportTrades
? È confuso chiamarli entrambiReportTrades
(o se lo faccio, devo metterli in pacchetti separati). In sostanza non esiste una classedi classeval
.
C'è qualcosa che mi manca? Posso evitare questo? Devo semplicemente rinunciare e usare !?
Le persone usano qualche struttura organizzativa per chiarire cosa sta succedendo?
È sicuro accedere allo store persistente direttamente in "react"? Pensavo che non potessi fare operazioni di blocco.Forse "ricevere" è necessario per quel particolare attore. –