Z tego, co zebrałem, wzorzec "zapytaj" jest uważany za niewłaściwą praktykę i należy go unikać. Zamiast tego zalecany wzór to model "aktor na żądanie". Jednak nie ma to dla mnie sensu, ponieważ wzór "ask" robi dokładnie to - tworzy lekkiego aktora na żądanie. Dlaczego więc jest to uważane za złe, zwłaszcza gdy futures są znacznie bardziej złożone i są w stanie bardziej elegancko radzić sobie z sortowaniem wielu wysyłek/odbierań?Dlaczego wzorzec "pytaj" aktora jest uważany za wzorzec przeciwwagi lub "zapach kodu"?
Odpowiedz
Od Akka docs:
„Istnieją implikacje Wyniki wykorzystania zapytać ponieważ trzeba coś śledzić kiedy czasy się, że musi być coś, co mosty obietnicę w produkt ActorRef i to również musi być osiągalny poprzez Remoting, więc zawsze wolą opowiadać o wydajności, a tylko pytam , jeśli musisz. "
Czasami jednak chcesz wysłać wiadomość spoza aktora. W takim przypadku możesz użyć numeru ask
. Użycie ask
gwarantuje, że otrzymasz odpowiedź w określonym czasie i czasami tego właśnie chcesz. Jednak, gdy używasz wzoru ask
, powinieneś zadać sobie pytanie, czy zamiast tego możesz użyć tylko Future
s.
Jest miejsce na ask
, ale z powodów wymienionych powyżej powinno być bardzo ograniczone.
Nie musisz używać aktora na żądanie. Niektórzy aktorzy mają być długowieczni, a inni nie. Jeśli aktor wykonuje potencjalnie niebezpieczną lub blokującą operację, możesz utworzyć ją na każde żądanie. Cokolwiek pasuje do twojej logiki aplikacji.
- 1. Wzorzec aktora z Akka i długimi procesami
- 2. Dlaczego wzorzec interpretera jest zasysany?
- 3. Wzorzec obiektu kwerendy (wzorzec projektu)
- 4. Dlaczego wzorzec strategii jest nazywany wzorem strategii?
- 5. Dlaczego WordPress jest uważany za źle zaprogramowany?
- 6. Jaki jest wzorzec projektowy Hexagon
- 7. Wzorzec obserwatora vs MVC
- 8. Częściowe kpiny jako zapach kodu?
- 9. Jak zsynchronizować wzorzec i pochodzenie/wzorzec używając egit w eclipse?
- 10. Niepoprawny wzorzec regex
- 11. Wzorzec dopasowania nierówności
- 12. Nie wiem, dlaczego ten strażnik wzorzec pasuje
- 13. Nadużywanie wzorzec dopasowania
- 14. Implementator obiecuje wzorzec
- 15. Wzorzec obserwatora dla stopera
- 16. C++ własne Wzorzec Obserwator
- 17. F # wzorzec dopasowania kuriozum
- 18. Wzorzec obserwatora za pomocą metody weak_ptr
- 19. Wzorzec obserwatora w języku Go
- 20. Wzorzec testowania jednostki
- 21. Wzorzec biblioteki JavaScript
- 22. SQLiteDatabase wielowątkowego wzorzec blokujący
- 23. Wzorzec projektowy dla czasu aplikacji?
- 24. async TryParse (...) wzorzec
- 25. Haskell rekord wzorzec dopasowania
- 26. Wzorzec specyfikacji i wydajność
- 27. Projekt Euler Wzorzec projektowy
- 28. Wzorzec dopasowania w GHCi
- 29. Wzorzec do przetworzenia zdarzeń
- 30. Wzorzec konstruktora: który wariant jest preferowany?
Czy możesz podać jakieś odniesienie do tego, gdzie jest to zalecane? Trudniej jest stworzyć argument za/przeciw czemuś, gdy nie jest się pewnym co to jest. Również takie odniesienie może zawierać uzasadnienie, dlaczego jest to wzorzec antysztotowy, który powinien zostać rozszerzony lub odrzucony. –
Myślę, że natknąłem się na coś podobnego w [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= Efektywna książka "% 20Akka & f = false" autorstwa Jamiego Allena, patrz rozdział 2 sekcja * Wzorzec dodatkowy * i podrozdziały * Problem * i * Unikanie pytania *. Rozumowanie wydaje się polegać na tym, że 'ask' używa niepotrzebnych zasobów, ponieważ' PromiseActorRef' jest tworzony za kulisami na wywołanie 'ask'. Przykład w książce używa wielu 'ask's i optymalizuje go do pojedynczego aktora * na żądanie *. – PermaFrost
Część problemu polega na tym, że jeśli pytasz od jednego aktora do drugiego i odzyskujesz przyszłość, możesz zakończyć zamykanie nad stanem zmiennym podczas przetwarzania tego oddzwaniania w przyszłości. Poprzez unikanie pytania, a tym samym Futures, eliminujesz te sytuacje. – cmbaxter