Motivácia
Nielen pri online herných portáloch, akým je Gamestudio, môžu pomocné služby spestriť používateľský zážitok a vniesť do aplikácie socializačný aspekt, ktorý ju oživí.
Vašou úlohou na dnešnom cvičení je implementovať do vašej hry nasledujúce služby:
- score - služba pre zaznamenávanie rebríčku najlepších skóre hráčov,
- comment - služba pre pridávanie komentárov k hre,
- rating - služba pre hodnotenie hry, napr. zadaním počtu hviezdičiek v škále od 1 do 5.
Návod pre implementáciu bude opísaný na príklade služby score pre ukladanie skóre hráčov a zobrazovanie rebríčka najvyššieho skóre hráčov. Pre implementáciu servisného komponentu pre každú z vyššie menovaných služieb budeme potrebovať nasledovné:
- Databázu s názvom gamestudio s tabuľkou, ktorá bude obsahovať údaje servisnej služby, napríklad
SCORE
, - Entitnú triedu služby, ktorá bude obsahovať všetky údaje o jednej inštancii služby, napríklad:
Score, Comment, Rating
, - Rozhranie pre službu, zabezpečujúce základné akcie, napríklad
ScoreService
, - Implementáciu rozhrania pre službu, ktorá zabezpečí sprístupnenie hodnôt z databázy a ukladanie hodnôt do databázy, napríklad
ScoreServiceJDBC
.
Ciele
- Vytvoriť databázu slúžiacu na ukladanie údajov služby.
- Vytvoriť entitnú triedu slúžiacu na reprezentáciu údajov služby. Vytvoriť rozhranie servisných komponentov.
- Implementovať rozhrania servisných komponentov.
- Integrovať vytvorené služby do hry.
Postup
Krok 1
Úloha 1.1
Nainštalujte si databázový systém, odporúčame použiť server PostgreSQL. Na jeho stiahnutie môžete využiť oficiálnu stránku http://www.postgresql.org/download/ alebo si ho nainštalujte prostredníctvom správcu softvérových balíkov vášho operačného systému. Použite najnovšiu verziu databázového servera dostupnú pre váš systém.
Úloha 1.2
Vytvorte databázu s názvom gamestudio
. Pre ďalšiu prácu s databázou si môžete pomôcť dokumentáciou pre PostgreSQL.
Poznámka
Na pripojenie, vytvorenie a správu databázy môžete použiť priamo vývojové prostredie IntelliJ IDEA a jeho nástrojový panel Database (tlačidlo pre jeho zobrazenie je spravidla pri pravom okraji okna)(Obr. 1). Pre pokročilú správu databáz mimo prostredia IntelliJ IDEA je od spoločnosti JetBrains dostupná aj aplikácia DataGrip. Možné je použiť aj aplikáciu pgAdmin.
Úloha 1.3
Pridajte do projektu jdbc ovládač (driver) pre PostgreSQL, ktorý umožňuje aplikácii napísanej v jazyku Java pripojiť sa k PostgreSQL databáze.
Ak váš projekt nevyužíva žiaden nástroj na správu závislostí projektu (napr. Gradle, Maven), môžete ovládač vyhľadať a pridať cez vývojové prostredie, v menu File -> Project Structure -> Libraries, kde po stlačení na tlačidlo +
v hornej časti vyberte možnosť From Maven (Obr. 2). Do vyhľadávacieho poľa zadajte názov ovládača org.postgresql:postgresql:42.2.19
(číslo verzie závisí od toho, ktorú verziu PostgreSQL používate).
Ak ste váš projekt vytvorili ako Maven projekt, môžete potrebný ovládač získať pridaním záznamu projektovej závislosti (tzv. dependency) v konfiguračnom súbore pom.xml
(video prednášky 4, čas cca 34:30).
Krok 2
Do projektu pridajte rozhrania a entity špecifikujúce servisné komponenty z archívu serviceSpecs.zip. Preštudujte si opis špecifikácie. Jednotlivé rozhrania obsahujú signatúry základných metód podporovaných jednotlivými službami.
Upozornenie
Kvôli kompatibilite s projektom GameStudio nemeňte rozhrania ani nedefinujte žiadne nové verejné metódy. Pri tvorbe databázy a služieb v nasledujúcich krokoch dodržte poskytnutú špecifikáciu rozhraní služieb.
Úloha 2.1
Implementujte entitné triedy Comment
a Rating
.
Pre ukážku máte k dispozícii implementáciu triedy Score
.
Krok 3
Úloha 3.1
Na základe špecifikácie v databáze vytvorte tabuľky, ktoré budú obsahovať informácie súvisiace so službami.
Vývojové prostredie IntelliJ IDEA má podporu pre prácu s databázovými systémami, takže tabuľky pre ukladanie dát služieb môžete vytvoriť aj priamo cez vývojové prostredie. K dispozícii je grafický editor pre prácu s tabuľkami (dialógové okná), ale aj možnosť zapísať a vykonať vlastný databázový skript.
Novú tabuľku môžete v prostredí IntelliJ IDEA pridať cez nástrojový panel Database (tlačidlo pre jeho zobrazenie je spravidla pri pravom okraji okna). Rozkliknutím názvu pripojenej databázy sa dostanete k schéme (položka schemas->public) a kliknutím naň pravým tlačidlom myši sa zobrazí kontextová ponuka, v ktorej je možné zvoliť New->Table (Obrázok nižšie).
Následne sa otvorí dialógové okno, v ktorom je možné pridať pomocou dlačidla jednotlivé stĺpce a nastaviť ich údajové typy (horná časť okna) alebo je možné zapísať do poľa pre text príkaz, ktorým sa má realizovať vytvorenie tabuľky (spodná časť okna). Pri pridávaní stĺpcov pomocou tlačidla + sa automaticky vyplní aj textové pole s príkazom, ktorý zodpovedá vytvoreniu tabuľky s takýmito stĺpcami.
Poznámka
Pri vytváraní tabuliek sa riaďte špecifikáciou jednotlivých služieb. Myslite ale na to, že táto špecifikácia je všeobecná a preto pri zadávaní údajových typov jednotlivých stĺpcov treba zohľadniť typy podporované databázovým systémom Postgresql.
Krok 4
Úloha 4.1
Vytvorte implementácie rozhraní služieb v balíku service
pre JDBC s názvami RatingServiceJDBC
a CommentServiceJDBC
. Inšpirujte sa príkladom ScoreServiceJDBC.java
.
Pre implementáciu služieb potrebujete:
- Údaje pre pripojenie k databáze (URL, login, password),
- SQL príkazy, ktoré sa využijú v jednotlivých metódach komponentu,
- Implementáciu metód rozhrania spolu s pripojením na databázu, ošetrením výnimiek a ukončením pripojenia.
Poznámka
Inšpirovať sa môžete implementáciou služby ScoreServiceJDBC
z prednášky. Všimnite si tiež, ako je služba score zakomponovaná do hry v triede ConsoleUI
.
Upozornenie
Pri implementácii dávajte pozor na to, aby ste triedy či metódy pomenovali podľa špecifikácie.
Krok 5
Úloha 5.1
Integrujte vytvorený servisný komponent do hry tak, aby všetky jeho funkcionality boli priamo využiteľné z konzolového používateľského rozhrania. Inšpirujte sa ukážkami implementácie z prednášok.
Napríklad, služba score by mala byť do hry zakomponovaná tak, že automaticky po dohratí hry sa skóre hráča uloží do databázy. Následne, či už automaticky alebo prostredníctvom špecifického príkazu zadaného hráčom, sa vypíše zoznam top 10 hráčov s najvyšším skóre.
Úloha 5.2
Vytvorte JUnit testy pre všetky vytvorené služby. Inšpirujte sa príkladmi v prednáškach.
Pre inšpiráciu si preštudujte zdrojové kódy z ročníka 2018 a 2019 (odkazy sú k dispozícii v systéme Moodle).
Buďte kreatívni a implementujte ďalšie testy, ktorými by bolo vhodné funkcionalitu overiť.
Poznámka
Myslite na to, že implementácia nad rámec požadovaných úloh a kreatívny prístup budú hodnotené aj v rámci odovzdávok bodmi za aktivitu ;)
Krok 6
Úloha 6.1
Nahrajte vašu implementáciu do vášho repozitára na GitLab-e. Projekt môžete ďalej priebežne aktualizovať. Pred ďalším cvičením sa uistite, že máte v repozitári vaše aktuálne súbory. Zároveň si pripravte otázky, ktoré by ste na cvičení chceli vyriešiť.
Zdroje
- Dokumentácia pre PostgreSQL
- Archív so špecifikáciou pre servisné komponenty serviceSpecs.zip
- Opis špecifikácie servisných komponentov
- Dokumentácia údajových typov pre Postgresql