Backbone: Difference between revisions
(34 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=Backbone= | =Backbone= | ||
Aine koduleht asub [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2015 Siin!] | |||
==Meeskonna liikmed== | ==Meeskonna liikmed== | ||
*Mikk Visnap | *Mikk Visnap | ||
*Silver Lumi | *Silver Lumi | ||
==XML-i töö retsensioon meeskonnale "SAVI"== | |||
Meeskond "SAVI" XML failide sisu leiab [https://wiki.itcollege.ee/index.php/Savi#XML_andmefail SIIT!] | |||
Meeskond "Savi" on koostanud XML skeemi kiirtoidu restorani menüü struktuurist. | |||
Esitatud on kõik nõutud failide sisud ja XML struktuur sisaldab vähemalt 4 loogilist dimensioon, seega vastab töö nõuetele. | |||
Eraldi oleks võinud olla esitatud ka failid hõlbsustamaks transformatsioonide käivitamist, kuna transformatsioonide tulemused polnud eraldi väljatoodud. | |||
XML skeem on väga lihtne. Hästi on kasutatud komplekstüüpe, millega on üldistatud hinna- ja suurusetüüpi muutujad. Tekstiliste muutujate puhul võiks kasutada CDATA süntaksit edastamaks sisulist informatsiooni, et vältida võimalikke reserveeritud märkide parsimise vigu. | |||
Transformatsiooni failid annavad hästi edasi XML struktuuris toodud sisu. | |||
Kokkuvõttes saab öelda, et kõik vajalik on olemas ja arusaadav. Hinnang tööle on positiivne. | |||
==XML andmefail== | ==XML andmefail== | ||
[http://enos.itcollege.ee/~slumi/XML/XML.zip Kõik alltoodud XML kodutöö failid saab alla laadida siit] | |||
===XML fail=== | ===XML fail=== | ||
Line 303: | Line 322: | ||
</pre> | </pre> | ||
==Veebiteenuse | =Veebiteenuse analüüs= | ||
===Teostatava projekti kirjeldus=== | |||
Projekti eesmärgiks on luua rakendus, mis tuletab töötajatele meelde tähelepanu vajavaid tööülesandeid. | |||
Tööülesanded on vastava rolli poolt konfigureeritavad läbi järgmiste dimensioonide: | |||
#Prioriteet | |||
#Kategooria | |||
#Asukoht | |||
#Korduse intervall | |||
#Kellaaegade vahemik | |||
#Nädalapäevad | |||
Tööülesandeid kuvatakse töötajatele nö TODO vaates, kus näidatakse hetkel aktiivsed (tegemata) ülesanded, reastatuna prioriteedi ning hilinemise mahu järgi (täitmiseks jäänud aeg). | |||
Tööülesande teostamise järel märgib töötaja ülesande teostatuks, valides ülesande juures olevast nimekirjast oma nime. | |||
Rakenduses implementeeritakse kasutajate ning rollide haldus. Kasutajale saab määrata 0--* rolli. Rollid määravad ära ligipääsuõigused rakenduse eri osadele. | |||
===Veebirakenduse kirjeldus=== | |||
---- | |||
Veebiteenuse eesmärk on pakkuda teenust eespool kirjeldatud TODO projektile. | |||
Teenuse loomisel kasutatakse sobivaid arendusmustreid ning ASP.NET MVC Web API tehnoloogiat. | |||
Teenus implmementeerib meetoid, mis suhtlevad andmebaasiga ning viivad andmetesse sisse äriloogilisi muudatusi. | |||
Võimalikult suur osa äriloogikast baseerub APIs. | |||
==Veebirakenduse käitumine== | |||
Klientrakendus teeb regulaarseid päringuid, et hoida kuvatav informatsioon värskena. Regulaarsete päringute lubatud tihedus on piiratud veebirakenduse poolt, kuid tegelik päringute tihedus on määratletud klientrakenduses. | |||
Regulaarsete päringute puhul rakendab API puhverdamist, vältimaks üleliigseid uuesti arvutustegevusi, kui see pole vajalik. | |||
Veebirakenduse poole pöördudes peab pöördumises sisalduma API võti mille alusel kasutaja indentifitseeritakse ning statistikat luuakse. | |||
==Veebiteenuse võimalused== | |||
Teenuse konfigureerimsieks ning statistika jälgimiseks loome API-le BE(Back End-i) ning ka lihtsa FE(Front End-i) hõlbsustamaks API kasutamist ning kasutajate BE-le ligipääsu võimaldamiseks. | |||
FE võimaldab järgnevat: | |||
#Erinevate kasutajate autentimist ja rollide järgi BE toimingute lubamist | |||
#Kuvab avalikke API meetodeid ja kirjeldab nende kasutamist | |||
BE võimaldab: | |||
#Teenuse kasutajate(API poole pöördujate) tuvastamist ning haldamist | |||
#Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes | |||
#Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist | |||
===Veebiteenuses implementeeritavad meetodid=== | |||
MUST HAVE meetodid on need, mis tagavad meie klientrakenduse core funktsionaalsuse. | |||
Klientrakenduse ADMIN rollis kasutajad pöörduvad API poole: | |||
#addReminderTemplate() | |||
#updateReminderTemplate() | |||
#addPriority() | |||
#updatePriority() | |||
#addLocation() | |||
#updateLocation() | |||
#addSchedule() | |||
#updateSchedule() | |||
#addReminder() | |||
#updateReminder() | |||
USER | |||
*'''getActiveReminders()''' | |||
**arvutab uuesti aktiivsete reminderite nimekirja ning lisab vajadusel uued reminderid | |||
**tagastab aktiivsete reminderite nimekirja | |||
*'''markReminderCompleted()''' | |||
**märgib valitud reminderi teostatuks, lisaks salvestab valitud töötaja ja tegevuse toimumise aja | |||
'''BACKBONE API andmebaasi äriloogiline struktuur''' | |||
[[File:Koleri2Chart.png|border|BACKBONE andmebaasi struktuur]] | |||
==Veebiteenus ja klientrakendus== | |||
Meie poolt loodud veebiteenus ja klientrakendus asub siin: [http://enos.itcollege.ee/~slumi/backbone/ LINK] | |||
=Meie koostatud Veebiteenuse ja klientrakenduse retsentsioon meeskonnale "TAB"= | |||
Meeskond TAB pool on loodud veebipõhine vestlustubade funktsionaalsus. | |||
DankChat klientrakenduse esialgne kirjeldus ja analüüs vastab sellele, mis on saavutatud. | |||
Olemas on toad, millega saab liituda, on olemas vestluse funktsionaalsus, olemite CRUD paistab olevat täielikult implementeeritud. | |||
Kõik eesmärgistatud must have funktsionaalsusesd on realiseeritud. Realiseeritud on ka mõned nice to have funktsionaalsused nagu näiteks bot, kes tervitavb sind tuppa sisenedes. | |||
Klient rakendus ja teenus on eralid lahendustes(solution), mis lihtsustab kahe erineva rakenduse eristamist ning nendega töötamist. Rakenduse käitumine on kiire ja kasutajasõbralik. Palju pole energiat kulutatud rakenduse välimusele - tundub et enamus energiast on läinud rakednuse töö lihvimisele ja see on väga hea. | |||
Klientrakenduse loomisel on kasutatud nõutud arendusmustreid(repositooriumi muster, UOW muster) ning rakenduse sisupäringud on DTO mustrit jälgides kihistatult loodud. | |||
Teenust pakkuv rakendus on samuti loodud kastutades antud õppeaines nõutud arendusmustreid ning põhimõtteid. Kontrollerid sisaldavad endas minimaalset koodi delegeerides kogu töö rakenduse äriloogika kihti. | |||
Teenuse poolt pakutav sisu on nõuetejärgselt pandud kasutama SSLi ning kontrollerid väljastavad informatsiooni vaid kehtiva bearer tokeniga pöörduvatele klientidele. | |||
Kokkuvõtes on täidetud kõik eesmärgid ja rakendused on loodud kasutades sobivad mustreid. Meie hinnang loodud rakendusele on suurepärane. |
Latest revision as of 13:48, 12 June 2015
Backbone
Aine koduleht asub Siin!
Meeskonna liikmed
- Mikk Visnap
- Silver Lumi
XML-i töö retsensioon meeskonnale "SAVI"
Meeskond "SAVI" XML failide sisu leiab SIIT!
Meeskond "Savi" on koostanud XML skeemi kiirtoidu restorani menüü struktuurist.
Esitatud on kõik nõutud failide sisud ja XML struktuur sisaldab vähemalt 4 loogilist dimensioon, seega vastab töö nõuetele.
Eraldi oleks võinud olla esitatud ka failid hõlbsustamaks transformatsioonide käivitamist, kuna transformatsioonide tulemused polnud eraldi väljatoodud.
XML skeem on väga lihtne. Hästi on kasutatud komplekstüüpe, millega on üldistatud hinna- ja suurusetüüpi muutujad. Tekstiliste muutujate puhul võiks kasutada CDATA süntaksit edastamaks sisulist informatsiooni, et vältida võimalikke reserveeritud märkide parsimise vigu.
Transformatsiooni failid annavad hästi edasi XML struktuuris toodud sisu.
Kokkuvõttes saab öelda, et kõik vajalik on olemas ja arusaadav. Hinnang tööle on positiivne.
XML andmefail
Kõik alltoodud XML kodutöö failid saab alla laadida siit
XML fail
<?xml version="1.0" encoding="utf-8" ?> <sales> <sale id="1000"> <saleHeader> <saleDate>2015-01-04</saleDate> <totalAmount>5000</totalAmount> <vatAmount percentage="20">4166</vatAmount> <salesPerson personId="6"><![CDATA[Silver Lumi]]></salesPerson> <client clientId="987"><![CDATA[Federico Garcia Lorca]]></client> </saleHeader> <saleRows> <saleRow rowNumber="1"> <product id="12345" unit="kg" quantity="200" value="500" currency="EUR" conversionToEur="1.0"><![CDATA[Ham]]></product> </saleRow> <saleRow rowNumber="2"> <product id="54321" unit="kg" quantity="100" value="2500" currency="EUR" conversionToEur="1.0"><![CDATA[Cheese]]></product> </saleRow> <saleRow rowNumber="3"> <product id="98521" unit="g" quantity="750" value="55" currency="EUR" conversionToEur="1.0"><![CDATA[Sugar]]></product> </saleRow> <saleRow rowNumber="4"> <product id="1112" unit="liter" quantity="47" value="1999" currency="EUR" conversionToEur="1.0"><![CDATA[Olive oil]]></product> </saleRow> </saleRows> </sale> <sale id="1001"> <saleHeader> <saleDate>2015-01-04</saleDate> <totalAmount>19000</totalAmount> <vatAmount percentage="20">15833</vatAmount> <salesPerson personId="7"><![CDATA[Mait Poska]]></salesPerson> <client clientId="885"><![CDATA[Jose Lopez Añudo]]></client> </saleHeader> <saleRows> <saleRow rowNumber="1"> <product id="5147" unit="g" quantity="125" value="19" currency="EUR" conversionToEur="1.0"><![CDATA[Chocolate]]></product> </saleRow> <saleRow rowNumber="2"> <product id="5151" unit="kg" quantity="25" value="250" currency="EUR" conversionToEur="1.0"><![CDATA[Butter]]></product> </saleRow> <saleRow rowNumber="3"> <product id="1112" unit="liter" quantity="50" value="2050" currency="EUR" conversionToEur="1.0"><![CDATA[Olive oil]]></product> </saleRow> </saleRows> </sale> <sale id="1002"> <saleHeader> <saleDate>2015-01-05</saleDate> <totalAmount>749</totalAmount> <vatAmount percentage="20">624</vatAmount> <salesPerson personId="1"><![CDATA[Mati Mäeots]]></salesPerson> <client clientId="885"><![CDATA[Mario Vargas Llosa]]></client> </saleHeader> <saleRows> <saleRow rowNumber="1"> <product id="4444" unit="kg" quantity="51" value="1" currency="EUR" conversionToEur="1.0"><![CDATA[Sugar]]></product> </saleRow> <saleRow rowNumber="2"> <product id="6666" unit="kg" quantity="750" value="2500" currency="EUR" conversionToEur="1.0"><![CDATA[Ketchup]]></product> </saleRow> </saleRows> </sale> <sale id="1003"> <saleHeader> <saleDate>2015-01-05</saleDate> <totalAmount>749</totalAmount> <vatAmount percentage="20">624</vatAmount> <salesPerson personId="1"><![CDATA[Mikk Visnap]]></salesPerson> <client clientId="885"><![CDATA[Some One]]></client> </saleHeader> <saleRows> <saleRow rowNumber="1"> <product id="4444" unit="kg" quantity="10" value="10" currency="USD" conversionToEur="1.5"><![CDATA[Sugar]]></product> </saleRow> <saleRow rowNumber="2"> <product id="4444" unit="kg" quantity="10" value="10" currency="SEK" conversionToEur="2"><![CDATA[Sugar]]></product> </saleRow> </saleRows> </sale> </sales>
XML skeemifail
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="sales"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="sale"> <xs:complexType> <xs:sequence> <xs:element name="saleHeader"> <xs:complexType> <xs:sequence> <xs:element name="saleDate" type="xs:date" /> <xs:element name="totalAmount" type="xs:decimal" /> <xs:element name="vatAmount"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:unsignedShort"> <xs:attribute name="percentage" type="xs:unsignedByte" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="salesPerson"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="personId" type="xs:unsignedInt" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="client"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="clientId" type="xs:unsignedInt" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="saleRows"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="saleRow"> <xs:complexType> <xs:sequence> <xs:element name="product"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:unsignedInt" use="required" /> <xs:attribute name="unit" type="xs:string" use="required" /> <xs:attribute name="quantity" type="xs:decimal" use="required" /> <xs:attribute name="value" type="xs:decimal" use="required" /> <xs:attribute name="currency" type="xs:string" use="required" /> <xs:attribute name="conversionToEur" type="xs:decimal" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="rowNumber" type="xs:unsignedByte" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="id" type="xs:unsignedShort" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSLT failid
Kuvab kõik XML failis toodud müügid ning müügiarve read
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <head> <title>All Sales</title> </head> <body> <h1>All Sales</h1> <xsl:for-each select="sales/sale"> <h2>Client: <xsl:value-of select="saleHeader/client"/> </h2> <h3>Sales rep: <xsl:value-of select="saleHeader/salesPerson"/> </h3> <ol> <xsl:for-each select="saleRows/saleRow"> <li> <xsl:text>Sale of </xsl:text> <xsl:value-of select="product/@quantity"/> <xsl:text> </xsl:text> <xsl:value-of select="product/@unit"/> <xsl:text> of </xsl:text> <xsl:value-of select="product"/> <xsl:text> @ </xsl:text> <xsl:value-of select="product/@value"/> <xsl:text> </xsl:text> <xsl:value-of select="product/@currency"/> <xsl:text>/</xsl:text> <xsl:value-of select="product/@unit"/> <xsl:text>. Sale value </xsl:text> <xsl:value-of select="product/@value * product/@quantity"/> <xsl:text> </xsl:text> <xsl:value-of select="product/@currency"/> <xsl:text>.</xsl:text> </li> </xsl:for-each> <br /> <br /> </ol> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Otsib XML'ist välja need müügid, milles esines toode "SUGAR" ja kuvab need müügid
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <head> <title>SEARCH RESULTS</title> <style type="text/css"> table { text-align: left; } </style> </head> <body> <table> <tr> <th colspan="2" style="color:blue">SEARCH RESULTS</th> </tr> <tr> <th colspan="2" style="border-bottom:1px dotted black">showing all the sales where SUGAR was one of the components</th> </tr> <tr> <th colspan="2"> </th> </tr> <xsl:for-each select="sales/sale[saleRows/saleRow/product[string(.)='Sugar']]"> <tr> <th>Sales Date</th> <td><xsl:value-of select="saleHeader/saleDate"/></td> </tr> <tr> <th>Salesperson</th> <td> <xsl:value-of select="saleHeader/salesPerson"/> </td> </tr> <tr> <th>Client</th> <td> <xsl:value-of select="saleHeader/client"/> </td> </tr> <xsl:for-each select="saleRows/saleRow"> <tr> <th>Product <xsl:value-of select="@rowNumber"/> </th> <td><xsl:value-of select="product"/></td> </tr> </xsl:for-each> <tr> <th colspan="2" style="background-color:red"></th> </tr> <tr> <th colspan="2"> </th> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Veebiteenuse analüüs
Teostatava projekti kirjeldus
Projekti eesmärgiks on luua rakendus, mis tuletab töötajatele meelde tähelepanu vajavaid tööülesandeid.
Tööülesanded on vastava rolli poolt konfigureeritavad läbi järgmiste dimensioonide:
- Prioriteet
- Kategooria
- Asukoht
- Korduse intervall
- Kellaaegade vahemik
- Nädalapäevad
Tööülesandeid kuvatakse töötajatele nö TODO vaates, kus näidatakse hetkel aktiivsed (tegemata) ülesanded, reastatuna prioriteedi ning hilinemise mahu järgi (täitmiseks jäänud aeg). Tööülesande teostamise järel märgib töötaja ülesande teostatuks, valides ülesande juures olevast nimekirjast oma nime. Rakenduses implementeeritakse kasutajate ning rollide haldus. Kasutajale saab määrata 0--* rolli. Rollid määravad ära ligipääsuõigused rakenduse eri osadele.
Veebirakenduse kirjeldus
Veebiteenuse eesmärk on pakkuda teenust eespool kirjeldatud TODO projektile. Teenuse loomisel kasutatakse sobivaid arendusmustreid ning ASP.NET MVC Web API tehnoloogiat. Teenus implmementeerib meetoid, mis suhtlevad andmebaasiga ning viivad andmetesse sisse äriloogilisi muudatusi. Võimalikult suur osa äriloogikast baseerub APIs.
Veebirakenduse käitumine
Klientrakendus teeb regulaarseid päringuid, et hoida kuvatav informatsioon värskena. Regulaarsete päringute lubatud tihedus on piiratud veebirakenduse poolt, kuid tegelik päringute tihedus on määratletud klientrakenduses.
Regulaarsete päringute puhul rakendab API puhverdamist, vältimaks üleliigseid uuesti arvutustegevusi, kui see pole vajalik.
Veebirakenduse poole pöördudes peab pöördumises sisalduma API võti mille alusel kasutaja indentifitseeritakse ning statistikat luuakse.
Veebiteenuse võimalused
Teenuse konfigureerimsieks ning statistika jälgimiseks loome API-le BE(Back End-i) ning ka lihtsa FE(Front End-i) hõlbsustamaks API kasutamist ning kasutajate BE-le ligipääsu võimaldamiseks.
FE võimaldab järgnevat:
- Erinevate kasutajate autentimist ja rollide järgi BE toimingute lubamist
- Kuvab avalikke API meetodeid ja kirjeldab nende kasutamist
BE võimaldab:
- Teenuse kasutajate(API poole pöördujate) tuvastamist ning haldamist
- Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes
- Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist
Veebiteenuses implementeeritavad meetodid
MUST HAVE meetodid on need, mis tagavad meie klientrakenduse core funktsionaalsuse. Klientrakenduse ADMIN rollis kasutajad pöörduvad API poole:
- addReminderTemplate()
- updateReminderTemplate()
- addPriority()
- updatePriority()
- addLocation()
- updateLocation()
- addSchedule()
- updateSchedule()
- addReminder()
- updateReminder()
USER
- getActiveReminders()
- arvutab uuesti aktiivsete reminderite nimekirja ning lisab vajadusel uued reminderid
- tagastab aktiivsete reminderite nimekirja
- markReminderCompleted()
- märgib valitud reminderi teostatuks, lisaks salvestab valitud töötaja ja tegevuse toimumise aja
BACKBONE API andmebaasi äriloogiline struktuur
Veebiteenus ja klientrakendus
Meie poolt loodud veebiteenus ja klientrakendus asub siin: LINK
Meie koostatud Veebiteenuse ja klientrakenduse retsentsioon meeskonnale "TAB"
Meeskond TAB pool on loodud veebipõhine vestlustubade funktsionaalsus.
DankChat klientrakenduse esialgne kirjeldus ja analüüs vastab sellele, mis on saavutatud. Olemas on toad, millega saab liituda, on olemas vestluse funktsionaalsus, olemite CRUD paistab olevat täielikult implementeeritud.
Kõik eesmärgistatud must have funktsionaalsusesd on realiseeritud. Realiseeritud on ka mõned nice to have funktsionaalsused nagu näiteks bot, kes tervitavb sind tuppa sisenedes.
Klient rakendus ja teenus on eralid lahendustes(solution), mis lihtsustab kahe erineva rakenduse eristamist ning nendega töötamist. Rakenduse käitumine on kiire ja kasutajasõbralik. Palju pole energiat kulutatud rakenduse välimusele - tundub et enamus energiast on läinud rakednuse töö lihvimisele ja see on väga hea. Klientrakenduse loomisel on kasutatud nõutud arendusmustreid(repositooriumi muster, UOW muster) ning rakenduse sisupäringud on DTO mustrit jälgides kihistatult loodud.
Teenust pakkuv rakendus on samuti loodud kastutades antud õppeaines nõutud arendusmustreid ning põhimõtteid. Kontrollerid sisaldavad endas minimaalset koodi delegeerides kogu töö rakenduse äriloogika kihti.
Teenuse poolt pakutav sisu on nõuetejärgselt pandud kasutama SSLi ning kontrollerid väljastavad informatsiooni vaid kehtiva bearer tokeniga pöörduvatele klientidele.
Kokkuvõtes on täidetud kõik eesmärgid ja rakendused on loodud kasutades sobivad mustreid. Meie hinnang loodud rakendusele on suurepärane.