Programowanie reaktywne w jezyku ScalaProjektowanie systemu aktorówPrzykłady
git clone https://github.com/agh-reactive/buddychat.git cd buddychat sbt run Zadanie -- e-SklepZadanie polega na zaimplementowaniu fragmentu systemu e-Sklepu złożonego z następujących aktorów:
Separacja logiki dziedzinowejDobrą praktyką w projektowaniu systemu aktorów jest oddzielenie logiki dziedzinowej od logiki komunikacji. Przykładowo aktor Cart nie powinien implementować jednocześnie stanu koszyka i protokołu komunikacji, bo utrudnia to testowanie samej logiki biznesowej (stanu koszyka) -- można to robić tylko przez asynchroniczny protokół komunikacji. W tym przypadku najlepiej wydzielić klasę Cart reprezentującą obiekt dziedzinowy i aktora CartActor implementującego protokół komunikacji:case class Cart(items: Seq[Any]) { def contains(item: Any): Boolean = ??? def addItem(item: Any): Cart = ??? def removeItem(item: Any): Cart = ??? def size: Int = ??? } class CartActor extends Actor { def receive = { case AddItem(item, count) => ??? ... } } object CartActor { def apply(): Behavior[Command] = Behaviors.receiveMessage { case AddItem(item, count) => ??? ... } }Zadania do wykonania:
Do implementacji powyższych zadań proszę wykorzystać przygotowany szablon z początkowymi testami znajdujący się tutaj: https://github.com/agh-reactive/reactive-scala-labs-templates Testy uruchamiamy komendą: sbt testSzablon został stworzony, aby ułatwić implementację zadań domowych i pozwolić na skupienie większej uwagi na implementacji istotnych części zadania. Może się zdarzyć, iż szablon w niktórych miejsach będzie wymagał poprawek. Takie poprawki można zgłaszać jako PR do odpowiedniego repozytorium na githubie - będzie to premiowane punktami za aktywność. Przy odbiorze zadań większy nacisk zostanie położony na zrozumienie poszczególnych fragmentów programów i mechanizmów akki. Bartosz Baliś, balis at agh edu pl Maciej Malawski, malawski at agh edu pl Katarzyna Rycerz, kzajac at agh edu pl Krzysztof Borowski, kborowski at agh edu pl |