Da quello che ho raccolto, il modello "chiedi" è considerato una cattiva pratica e dovrebbe essere evitato. Invece, il modello raccomandato è il modello "attore per richiesta". Tuttavia, questo non ha senso per me, poiché lo schema "chiedi" fa esattamente questo: crea un attore leggero per richiesta. Quindi, perché questo è considerato negativo, specialmente quando i futures sono molto più componibili e sono in grado di gestire più elegantemente le regole di confronto di più mittenti/destinatari?Perché l'attore "chiede" un pattern considerato anti-pattern o "odore di codice?"
risposta
Da Akka docs:
"Non ci sono inerenti le prestazioni nell'uso chiedere poiché qualcosa deve per tenere traccia di quando il tempo è scaduto, ci deve essere qualcosa che ponti una promessa in un ActorRef e deve anche essere raggiungibile tramite il servizio remoto, quindi preferisci sempre dire per le prestazioni e solo se lo devi chiedere al numero . "
Ma a volte si desidera inviare un messaggio dall'esterno di un attore, nel qual caso è possibile utilizzare ask
. L'utilizzo di ask
garantisce che si ottiene una risposta entro il timeout specificato e, a volte, questo è ciò che si desidera. Tuttavia, quando si utilizza lo schema ask
, è consigliabile porsi una domanda se si possa semplicemente utilizzare Future
s.
C'è un posto per ask
ma dovrebbe avere un uso molto limitato a causa dei motivi di cui sopra.
Non è necessario utilizzare l'attore per richiesta. Alcuni attori sono pensati per essere vissuti a lungo e altri no. Se un attore esegue un'operazione potenzialmente pericolosa o bloccante, è possibile crearne uno per richiesta. Qualunque sia la tua logica applicativa.
- 1. proprietà Perché definiscono nel prototipo è considerato un antipattern
- 2. Questo metodo viola SOLID o ha odore di codice?
- 3. Codice ravioli - perché un anti-pattern?
- 4. La "classe dati" è davvero un odore di codice?
- 5. L'uso di Haskell monade un odore di codice?
- 6. Il punto di Java è un nuovo odore di codice?
- 7. Perché il collegamento bidirezionale in AngularJS è un antipattern?
- 8. Rcov: Perché questo codice non è considerato coperto?
- 9. getter e setter: Codice odore, male necessario, o non può vivere senza di loro
- 10. design di interfaccia Fluent e il codice odore
- 11. Perché Marshal.DestroyStructure è considerato puro?
- 12. Perché WordPress è considerato mal programmato?
- 13. Sto usando troppi dizionari all'interno dei dizionari nel mio codice, è un odore di codice?
- 14. È un uso eccessivo di colonne nullable in un database un "odore di codice"?
- 15. Un dizionario annidato in profondità è un antipattern?
- 16. Perché questo array Java è considerato bidimensionale?
- 17. Perché javascript: void (0) è considerato dannoso?
- 18. Perché l'implementazione di un pattern Singleton nel codice Java è (a volte) considerata un anti-pattern nel mondo Java?
- 19. Perché un valore letterale stringa vuoto è considerato true?
- 20. Uso confuso di sincronizzazione in Java: pattern o anti-pattern?
- 21. Il C++ è considerato debolmente digitato? Perché?
- 22. Perché Eclipse chiede di dichiarare strictfp all'interno di enum
- 23. Antipattern con Ruby on Rails
- 24. Perché il robot di indicizzazione di Yahoo è considerato "malvagio"?
- 25. Perché NSTextView non può essere considerato un riferimento debole?
- 26. Perché utilizzare "nuovo" per creare un array Javascript considerato negativo?
- 27. Le interfacce di un singolo implementatore per l'unità testano un antipattern?
- 28. Perché un pulsante Agentset si comporta diversamente da un pulsante dell'osservatore che chiede al gruppo agenti?
- 29. ASP.NET MVC: autorizzazione all'interno di un'azione - Modelli suggeriti o si tratta di un odore?
- 30. Bytecode Java "eccessivo" numero di codice "povero" dup considerato?
Potete fornire qualsiasi riferimento a dove questo è raccomandato? È più difficile creare un caso per/contro qualcosa quando non si è sicuri di cosa sia. Inoltre, tale riferimento potrebbe contenere il ragionamento per cui si tratta di un anti-pattern che dovrebbe essere espanso o confutato. –
Penso di aver trovato qualcosa di simile in [Effective Akka] (https://books.google.de/books?id=Wf5sAAAAQBAJ&pg=PP3&dq=Effective+Akka&hl=de&sa=X&ei=lGn3VM_CHKPlywPf5IDwAw&redir_esc=y#v=onepage&q= Effettivo% 20Akka & f = falso) libro di Jamie Allen, vedi capitolo 2 sezione * Il modello extra * e sottosezioni * Il problema * e * Evitare Chiedi *. Il ragionamento sembra essere che 'ask' utilizza risorse non necessarie, dal momento che un' PromiseActorRef' viene creato dietro le quinte per chiamata 'ask'. L'esempio nel libro usa multiple 'ask's e lo ottimizza in un singolo attore * per richiesta *. – PermaFrost
Parte del problema è che se si sta richiedendo da un attore a un altro e si ottiene un futuro, si potrebbe finire per chiudere lo stato mutabile quando si elabora quella richiamata Future. Evitando ask, e quindi Futures, elimini queste situazioni. – cmbaxter