Talk:Meeskond Udud
Teenuse ja klientrakenduse retsensioon meeskonna "Kirves" poolt
Teenus:
Meeskond UDUD on loonud oma teenuse kasutates Web API 2.0 versiooni. Teenuse eesmärk on pakkuda klientidele reaalajas olevate süsteemide logisid. Kuidas süsteem tegelikult peaks toimima, jääb veidi arusaamatuks. Ei saa paraku kuidagi testida, kuidas süsteemid peaksid ära kasutama seda teenust ja millised näevad välja tekitatud logid.
Nii teenus kui projekt on ühes solutionis, kuigi eraldi projektides. Teenuse poole peal on ära kasutatud osaliselt Võrgurakendused II aines õpitud mustreid.
Olemas on järgnevad vahekihid:
- DAL - Data access layer
- Models - Andmebaasi mudelid, kasutades Code first lähenemist
- Repositories - Tühjad konstruktorid Entity Frameworkile
- Transport Models - Transpordi mudelid, loogika jaoks, info mida päritakse andmebaasist.
Models
Andmebaasi mudelid tunduvad olema korralikud ja seosed samuti. Osaliselt on pandud eraldi label nimed, et vaates oleksid inimlikud pealkirjad väljadel. Paraku aga ei ole piiratud olemite max väärtusid, antud hetkel on need max väärtusega, mis ei ole andmebaasi jaoks eriti mõistlik.
Repositories
Et projektis kaotada otsesed siduvused funktsionaalsete meetodiega, on sisse toodud repositories kiht, mis võimaldab projekti arendust teha paindlikumaks, et mitte kirjutada kõike oma projektist ümber vaid lisada ja täiendada funktsionaalsust moodulitena.
Data access layer
Siin all on ära kirjeldatud kõik andmebaasis olevad mudelid ja antakse connection stringile andmebaasi nimetus. Paraku aga ei leia kahjuks kust kohast tõstetakse kogu andmebaas püsti. Antud hetkel ei näe meetodis vastavat koodi rida, mis looks andmebaasi kui projekt käima pannakse.
Transport Models
Eraldi on sisse toodud transpordi mudelid. Nende kaudu päritakse vajaminev info andmebaasilt, mida teenus edastab ja vastu võtab. Samas projektis on toodud eraldi mudelitele oma factory klass. Parem loogika oleks olnud vast teha üks factory klass, kus korjatakse create DTO meetodid kokku ja lisaks teha igale DTOle oma loogika, kuidas andmeid töödeltakse, päritakse jne.
Web API
Teenusel on olemas api enda poolne autentimine. Samuti on siin mõeldud ka liikluse turvalisusele ehk teenus jookseb HTTPS protokollil ja kasutatakse IIS serveri enda poolt loodud sertifikaate. Kontrollerid on üpris koodirohked ja segase struktuuriga. Olemas on seal põhilised kommentaarid ja osad kommentaarid on veidi emotsionaalselt sisse jäetud. Positiivne on meetoditel response message kasutamine ja veateadete kontroll.
Üldiselt on meeskond teenuse loomisega hakkama saanud, ära on kasutatud osaliselt aines tutvustatud vahekihte. Kontrollerid oleks võinud olla veidi puhtamad, aga põhiline funktsionaalsus on olemas ja kood siiski loetav, saab aru, mida mingi meetod teeb.
Klient:
Klientrakendusena esitas meeskond Udud kliendi enda poolt loodud reaalajas olevate süsteemide logide pakkumise teenusele. Klientrakenduse lähtekood asub mainituga samas solution’is, kuid eraldi projektis, ning on toimivana üleval ka Azure’is. Modernselt lihtsa välimusega rakendus võimaldab lisada, muuta ja kustutada erinevaid Homesystem’eid, System object type’isid ja System object’eid. Logisid ei teki, kuna midagi reaalset, mida kõnealuse süsteemiga ühendada, pole kusagilt võtta.
Kõikide andmesisestuslahtrite puhul läbi kogu rakenduse on kasutusel andmete valideerimine, sellega seotud vigu ei õnnestunud testides ei kogemata leida ega meelega välja meelitada. Seda eriti, kuna kõik täidetavad väljad ootavad sisendiks sõnet. Object type’ide puhul on Homesystem’ite ja System object’ite puhul Object type’ite seostamine lahendatud dropdownlistidena, mis lihtsustab märgatavalt kasutaja elu. Mitu-ühele suhtes olevat „mitu“-otsa objekti pole võimalik enne kustutada kui on kustutatud „üks“-otsa olemid. Hetkel peab seda tegema käsitsi, kuid ideaalis võiks olla ka võimalus seda soovi korral süsteemil automaatselt teha lasta, näiteks kuvades enne kõik „üks“-otsa objektid ja küsides kinnitust.
Registreerumine ja sisse logimine toimivad muidu ideaalselt, kuid kui ühe kontoga kahel erineval sakil toimetada ja ühel neist välja logida, siis jääb kasutaja teisel siiski sisselogituks. Sama kehtib ühe konto samaaegsel kasutamisel mitme erineva seadmega mitme erineva internetiühenduse otsas olles. Kas antud juhul on tegemist feature’i või bug’iga, on igaühe enda otsustada, kuid ideaalis eelistaksime ükskõik millisel saidil, kui väljalogimisel kustuks ka sessioon ning kasutaja olekski igal seadmel koheselt välja logitud. Positiivse külje pealt tooksime veel välja vast aegumisaja kasutamise.
Kood on kenasti struktureeritud ja seetõttu ka hõlpsasti loetav. Kommentaare on vähevõitu. Kliendi loomisel on kasutatud ära samas solution’is asuvat teenuseklasside projekti, mis õigustab end antud juhul igati, kuid pole pahatihti võimalik, kui luua klienti mõnele kolmanda osapoole teenusele.