Meeskond: D♭

From ICO wiki
Jump to navigationJump to search

Meeskond ja rollid

  • Semjon Greef
  • Martin Nõukas
  • Martin Arusalu (projekti juht)
  • Roomet Saadi

Idee

Märkmik.

Tehnoloogia

Kasutatav tehnoloogia: C#, Windows Presentation Foundation.

Idee

WPF rakendus, mida kasutatakse digitaalse märkmiku pidamiseks. Saab lisada, kustutada, muuta ja vaadata märkmeid. Märkmed jagunevad erinevatesse kategooriatesse (näiteks sport, muusika, vaba aeg jne). Märkmete sisuks on vormindatud tekst. Pilte ega muud graafilist sisu ei ole. Märkmeid saab ka erinevate parameetrite järgi otsida (nagu kuupäev, sisu, kategooria). Olulisi märkmeid saab ka pinnida, mis tähendab seda, et need asuvad nimekirjas staatiliselt kõige üleval.

Analüüs

Tegemist on wpf rakendusega, mis võimaldab kasutajal lisada, kustutada, muuta, kuvada, otsida ja organiseerida märkmeid või memosid.

Funktsionaalsus

Must have

Rakenduses on kasutajate süsteem. Esmalt peab ennast kasutajaks registreerima sisestades oma kasutajanime ja parooli. Seejärel saab logida rakendusse sisse. Sisestades vale kasutajanime või parooli, kuvatakse kasutajale sellekohane veateade. Olles sisse logitud kuvatakse kasutajale tervitav „Tere, „ koos kasutajanimega, nimekiri kasutaja viimaste märgete pealkirjadest ning aktiivse märkme sisulahter.

Märkmete nimekirjas kuvatavad märkmed sorteeritakse esmalt prioriteedi, seejärel muutmise kuupäeva ja selle puudumisel sisestamise kuupäeva järgi. Valides nimekirjast mõne märkme, kuvatakse sisulahtris selle märkme loomise kuupäev, (olemasolul) muutmise kuupäev, prioriteet ja sisu. Kui nimekirjast on mõni märge valitud, siis seda saab kustutada või ka muuta. muudatuste salvestamiseks tuleb vajutada nuppu "Salvesta".

Märgetel on andmebaasis märkme ID, pealkiri, sisu, sisestamise kuupäev, muutmise kuupäev, lisaja ID ja prioriteedi ID. Igale märkmele saab lisada ka märksõnu ja paigutada see mingisse kategooriasse.

Prioriteedi ID järgi määratakse märkmele prioriteet. Need on eraldi andmebaasi tabelis ja juba süsteemi fikseeritud, ehk neid ei saa kasutaja lisada ega muuta. Prioriteedil on prioriteedi ID ja nimetus. Nimetusteks on „madal“, „keskmine“, „kõrge“. Prioriteedi määramine pole märkme loomise puhul kohustuslik. Juhul, kui sisestamisel prioriteeti ei määrata, saab märge vaikimisi prioriteediks „madal“.

Rakenduses on märkmete jaoks kategooriad. Igal kasutajal on omad kategooriad. Andmebaasis on eraldi kategooriate tabel ja atribuutideks on kategooria ID, lisaja ID ja nimetus. Esialgu kasutajal märkmete kategooriaid ei ole. Selle loomiseks tuleb kasutajal vajutada „loo kategooria“ nuppu, mis avab kategooria loomise vaate. Igal märkmel saab olla vaid üks kategooria. Kategooria valik märkmele toimub märkme loomise vaates. Kategooriasse paigutamine pole kohustuslik. Sellisel juhul ei saa märge mitte vaikimisi kategooriat, vaid jääb kategooriata.

Märkme loomise vaates saab ka märksõnu lisada. Märksõnade jaoks on andmebaasis tabel, mis sisaldab atribuute: märksõna ID ja nimetus. Topeltmärksõnade vältimiseks on märkmed märkmetega seotud vahetabeli abil, kus on seose ID, märksõna ID ja märkme ID. Märksõnade jaoks on eraldi tekstiväli ja neid eraldatakse komaga. Pärast ja enne märksõna olev tühi ruum (whitespace) eemaldatakse (trimmitakse), aga märksõna võib koosneda mitmest sõnast ehk see võib sisaldada tühikuid. Ühel märkmel võib olla mitu märksõna.

Märkmeid saab otsida, ehk filtreerida. Otsimiseks on eraldi vaade, mis sisaldab otsingulahtrit, otsitulemuste nimekirja ning aktiivse märkme sisulahtrit. Sisestades otsingulahtrisse otsitava sõne ja vajutades „Otsi“ otsitakse märkmeid, mille pealkiri, sisu, kategooria või märksõna sisaldab otsitavat ja mille lisaja ID on sisseloginud kasutaja ID. Otsingutulemused kuvatakse seejärel pealkirjade nimekirjana ning sarnaselt põhivaatele sorteeritakse esmalt prioriteedi, seejärel muutmise kuupäeva ja selle puudumisel loomise kuupäeva järgi. Valides nimekirjast mõne postituse pealkirja, kuvatakse sisulahtris selle märkme lisamise kuupäev, (olemasolul) muutmise kuupäev, prioriteet ja sisu.

Süsteemis toimub taustal toimingute logimine. Logikirjed salvestatakse eraldi andmebaasi tabelisse. Tabelis on logi ID, sissekande aeg ja kirjeldus. Toimingud, mida salvestatakse: õnnestunud sisselogimine, ebaõnnestunud sisselogimine, registreerimine, kategooria lisamine, märkme lisamine, märkme muutmine, märkme kustutamine, märksõna lisamine, märkme kategooria muutmine, otsingu teostamine, välja logimine.

Nice to have

Vastavalt kasutaja soovidele on võimalik märkmete erinevaid atribuute (pealkiri ning sisu) vormindada, muutes märkmeid visuaalselt väljapaistvaks ning tähtsaid/kindlaid osi tekstis niiöelda „highlight“-ida. Võimalik on anda pealkirjadele heading tüüpi välimus, kus pealkirjad on tavalisest tekstist natukene paksemad ja suuremad ning võimalus anda pealkirjale kolme erinevat stiili headingud (h1, h2, h3). Kui märkme sisus kasutatakse näiteks võõrsõna, siis selle saab muuta italic tüüpi tekstiks.

Disain

Kogu WPF rakenduse UX/UI pool võiks olla hästi läbi mõeldud ja töödeldud. Rakendus võiks olla hea väljanägemisega ning mugav. Kujundus on minimalistlik ja liidese elemendid disainitud Flat ideoloogia järgi. Tuleb valmis teha disaini prototüüp, ilmselt kasutades Adobe tarkvara ning seejärel juba kujundada kasutades XML-i või Visual Studio „drag and drop“ funktsionaalsust. Seda tuleb teha aga vaate ja akna kaupa. Igat vaadet ja akent tuleb eraldi kujundada ja läbi mõelda, mis ja kuidas sinna paremini sobiks. Võimalik, et läheb ka logo tegemiseks. Lõpuks võiks projekt näha välja professionaalne, tõsiseltvõetav ning terviklik. Disainida tuleb 5 vaadet - sisselogimise ja registreerimise vaade, põhivaade (nimekiri viimastest märgetest, navigatsioon), märkme lisamise vaade, kategooriate lisamise ja kustutamise vaade ning otsingu vaade. Igal vaatel on üks põhitegevus (call to action) mis on kontrastselt esile toodud. Põhivaate puhul on selleks sisselogimine (registreerimine on sekundaarne), põhivaate puhul uue märkme lisamise nupp, märkme ja kategooria lisamise vaadetes salvestamise nupp ning otsingu vaates "Otsi" nupp. Veateated kuvada punaselt ning igas vaates samal kohal. Ka prioriteetsemad märkmed peaksid värviliselt olema välja toodud.

Võimalikud probleemid

Võimalikeks probleemideks võivad olla: C# praktika puudumine (s.t vähe kogemust meil kõigil C# keelega), MVVM struktuuri implementeerimine, konfliktid koodi üleslaadimisega TFS-i, rühmana töö tegemine (ülesannete jagamine ja eraldi ülesannete lahendamine), ühtse arendusstiili rakendamine (muutujate, klasside jms nimetamine), ajapuudus või vale aja planeerimine.

Dokumentatsioon

Arendusprotsessi kirjeldus

Esimene samm oli meeskonna kokkupanek. Meeskond oli koos septembri teiseks nädalaks ning projektijuhiks sai valitud Martin Arusalu. Esialgne suhtlus toimus Slack keskkonnas, kus pakkusime erinevaid ideid ning korraldasime hääletuse. Jõudsime järelduseni, et teeme märkmete haldamise rakenduse. Alustasime projektiga varakult, kuna õppejõud pakkus välja idee, et kõik, kes alustavad projektiga 9. praktikumi ajal ja jõuavad teatud funktsionaalsustega valmis, saavad boonuspunkte.

Teiseks sammuks oli analüüs. Kirjutamise jaotasime kolmeks, kus Martin Arusalu kirjutas Must have funktsionaalsuse, Martin Nõukas Nice to have funktsionaalsuse ja Semjon Greef Disaini reeglistiku. Roomet Saadi lisas lõppu võimalike probleemide loetelu.

Tuleb tõdeda, et meie arendusprotsess lähtus suuresti õppejõu poolt paika pandud daatumite järgi, mis olid motiveerivad lisapunktide teenimiseks. Seega toimus arendustöö iteratsioonide kaupa. Martin Arusalu ülesandeks oli Analüüs jagada etappideks ning põhifunktsionaalsus jagada väiksemateks ülesanneteks. Need ülesanded omakorda tiimiliikmete vahel ära jagada. Esialgu üritasime jagada ülesanded nii, et Martin Arusalu tegeleks BO-de ja Service klassidega, Roomet Saadi ja Martin Nõukas vahekihi ehk ViewModeliga ning Semjon Greef kasutajaliidesega. Selle jaotuse tulemusena tekkis aga probleem, et üks ei saanud enne edasi arendada, kui eelmine oli selleks vajaliku ülesande ära teinud. Edasi proovisime modulaarset arendust, et igaüks tegeleb mingi kindla mooduli või funktsionaalsuse osaga ning realiseerib selle puhul BO-de muudatused, Service kihi meetodid, ViewModeli meetodid ning kasutajaliidese elemendid ja bindingud.

Esimene suurem iteratsioon sisaldas vaatemudelit, service kihti ja lihtsamaid päringuid ning WPF esimeste andmete bindimist. Semjoni ülesandeks oli vaadete ja lehtede loomine ning nende vahel navigeerimine lisaks aitas ta Martin Arusalut esimese Service klassi loomisel. Roomet tegeles vaatemudeli loomise ning data bindingutega. Martin Arusalu tegeles peamiselt back-end-iga. Ta tegi logimise ja, registreerimise loogika valmis ning kasutajate süsteemi. Martin Nõukas tegeles Service-kihi ning ViewModel-i kihi ühendamisega, et saaks kõik vajalikud meetodid, mis asuvad erinevates Service-ites, kätte ViewModelist ning et neid hiljem saaks kasutada vaate xaml-is. Antud iteratsioon sai suures osas tehtud kooli seinte vahel, kus kõik tiimi liikmed said kokku ja programmeerisid ning küsisid nõu üksteiselt.

Teine iteratsioon lähtus prototüübi tegemisest. Kuna projektil olid kõik vajalikud kihid olemas, olid teise iteratsiooni sisuks funktsionaalsuse täiendamine ning WPFi lisa view ja page tegemine. Semjon, Roomet ja Martin Nõukas tegid märkmete sorteerimise, märkmete kuvamise ja muutmise. Martin Arusalu lisas projekti andmebaasi skripti, mis tekitaks lisaks esialgsele andmebaasistruktuurile ka süsteemsed prioriteedid ning ühe testkasutaja. Lisaks parandas testimisel tekkinud pisivigu.

Kolmas iteratsioon oli pärast aastavahetust, kui veetsime nädalavahetuse koolis ja täiendasime taas funktsionaalsust. Kuigi kolmanda iteratsiooni ülesanneteks oli dokumentatsiooni loomine, toimus enamus tööd teises iteratsioonis pooleli jäänud ülesannetega. Martin Nõukas ning Roomet täiendasid märkmete muutmist, Martin Nõukas lisas prioriteedi määramise ja muutmise. Semjon realiseeris navigatsiooni, veateated ning kommenteeris ViewModeli ja kasutajaliidese poolset koodi. Martin arusalu lisas Kategooriate mooduli, kommenteeris BO-de ja Service klasside koodi. Üheskoos sai mõeldud lahendusi kuvamise ja bindingutega seotud probleemidele ja alustatud testimisega. Dokumentatsiooni koostamine sai jagatud nii, et Martin Nõukas teeb kasutajajuhendi ja sealjuures testib rakendust, Semjon Greef ja Roomet Saadi kirjutavad käesoleva Arendusprotsessi kirjelduse ning Martin Arusalu parandab testimisel ilmnenud vead, vaatab üle ja vajadusel täiendab eelnevat kahte dokumentatsiooni osa ning lisab lahenduse kirjelduse.

Nagu ka pärast analüüsi aimata oli, osutus kõige keerukamaks MVVM struktuuri rakendamine ja ka üleüldine koodi ühtse stiili hoidmine.

Lahenduse kirjeldus

Käesoleva projekti tulemusena loodi Windows Presentation Foundation tehnoloogial põhinev rakendus, mille peamiseks ülesandeks on märkmete ja memode salvestamine. Rakenduses on loogika ja kood jaotatud MVVM (Model-View-ViewModel) struktuuri järgi, päringute tegemiseks kasutatakse LINQ komponenti ning andmete hoiustamiseks tuleb igas klient-arvutis luua Microsofti SQL andmebaas. Äriloogikaks on rakendusel BO-d (Business Objects).

Kogu lahendus koosneb kahest alamrakendusest. Rakendus "Memo" on back-end ehk sisaldab BO-sid ja Service kihti. Rakendus "Memo.WPF" on käivitatav programm, ehk see, mida kasutaja näeb. Memo.WPF teostab päringuid Memo Service kihile.

Andmebaas

Rakenduse anbebaasiskeemis on 7 tabelit: Tabel Priority sisaldab prioriteetide andmeid. Tabel Note sisaldab andmeid märkmete kohta. Tabelis Note_Keyword on seosed märkmete ja märksõnade vahel. Tabelis Log on logikirjed süsteemis toimunud tegevuste ja toimingute kohta. Tabelis User on registreeritud kasutajad. Süsteemi loomisel lisatakse sinna ka testkasutaja kasutajanimega "test" ja parooliga "test" Tabelis Category on kasutaja poolt sisestatud kategooriad. Tabelis Keyword on märksõnad. Märksõnad on globaalsed ehk ei ole seotud kasutajaga.

Business Objects

Rakendusel on 6 BO-d: Base_BO sisaldab üldiseid meetodeid ja atribuute. Järgnevat kuus BO-d vastavad andmebaasiskeemis olevatele tabelitele ühe erandiga. BO-de hulgas ei ole Note_Keyword olemit, sest see on ainult seosetabel.

Teenused

Rakenduse Teenus(Service)kihis on 5 klassi: CategoryService, KeywordService, LogService, NoteService ja UserService. PriorityService klass polnud vajalik, sest prioriteetidega mingeid teenuseid seotud ei ole. Need on süsteemis fikseeritud ja muuta ei saa.

Vaatemudel

Vaatemudeleid on rakendusel üks - MainWindowViewModel.

Kasutajaliides

Kasutajaliideses on eraldatud sisselogimise vaade ja sisselogitud vaade. Sisselogitud vaates saab kuvada loodud märkmeid, lisada märget, seda muuta ja kustutada. Sisselogitud vaates on ka kaks lehte: CategoryPage, kus saab lisada ja kustutada kategooriaid ning FinderPage, kus saab otsida märkmeid.

Üldine

Rakenduse Memo.WPF App klassis on defineeritud loggedInUser muutuja, mis sisaldab sisselogitud kasutaja BO-d.

Kasutajajuhend

Kasutajajuhend ning installeerimisõpetus on lisatud lõpptoote kataloogi.