Hola, tenemos la solución a lo que buscabas, has scroll y la encontrarás más abajo.
Solución:
No, no te estás perdiendo nada. Yo tampoco soy un fan. En Scala es un poco mejor porque el método onReceive se puede intercambiar para simular el estado cambiante de un protocolo y usa funciones parciales que son un poco mejores que if/elseif/else… pero aún así es asqueroso. Es más agradable en Erlang, que es donde se originó este modelo, pero dicho esto, dadas las limitaciones que enfrenta el equipo de akka, tomaron las decisiones de diseño correctas e hicieron un excelente trabajo.
Una estrategia alternativa es realizar un despacho doble. Así que pase el comando al actor para que sean acciones, o busque en un mapa un controlador para el mensaje. Los agentes Akka son esencialmente los primeros, y cuando se acostumbran a su fuerza son bastante agradables. Pero, en general, un envío doble solo agrega complejidad, por lo que, en la mayoría de los casos, uno solo tiene que acostumbrarse al enfoque estándar. Lo que en Java significa si es una instancia de o una declaración de cambio.
Un ejemplo de envío doble (pseudocódigo), incluido aquí para completar, para facilitar la comprensión. Como enfoque viene con advertencias sanitarias, por lo que reitero; el enfoque estándar es estándar por una razón y eso se debe usar el 99% del tiempo.
onReceive( msg )
msg.doWork()
El problema con este enfoque es que ahora el mensaje necesita saber cómo procesarse a sí mismo, lo cual está sucio; provoca un acoplamiento apretado y puede ser frágil. Qué asco.
Entonces podemos usar una búsqueda de controladores (estilo de patrón de comando)
val handlers = Map( "msgid1"->Handler1, "msgid2->Handler2 )
onReceive( msg )
val h = handlers(msg.id)
h.doWork( msg )
el problema aquí es que ahora no está claro cuáles son los comandos y seguir el código implica saltar más. Pero hay veces que esto vale la pena.
Como señaló Roland, se debe tener cuidado al pasar una referencia al actor mismo. Los ejemplos anteriores no fallan en ese problema, pero sería una tentación fácil de hacerlo.
Aquí tienes las comentarios y calificaciones
Si guardas alguna indecisión y disposición de perfeccionar nuestro tutorial puedes escribir una glosa y con mucho gusto lo estudiaremos.