Leemur: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Odalberg (talk | contribs)
Ahokkone (talk | contribs)
Line 688: Line 688:
Stiil oli okei, kommentaare võiks alati rohkem olla. Ära ei olnud märgitud viited kui oli kasutatud weebi ja õppejõudude materjali abi. Iga projekti Referencide nimekirja vaadates ei hakanud midagi kummalist silma, kõik on selliselt nagu peab. Controllerite osas võiks tuleviku tarbeks luua ja eraldada api controllerid ning tavalised/view eraldi kaustadesse lihtsama jälgitavuse tarbeks.
Stiil oli okei, kommentaare võiks alati rohkem olla. Ära ei olnud märgitud viited kui oli kasutatud weebi ja õppejõudude materjali abi. Iga projekti Referencide nimekirja vaadates ei hakanud midagi kummalist silma, kõik on selliselt nagu peab. Controllerite osas võiks tuleviku tarbeks luua ja eraldada api controllerid ning tavalised/view eraldi kaustadesse lihtsama jälgitavuse tarbeks.
Käveri ASP.NET kodutöö kaitsmistest meelde jäänud soovitus, mida ta jõudis korrata mitmeid kordi: "Ärge kirjutage võimaluse korral koodi eesti keeles, kuna reaalses elus toimub kogu töö ainult inglise keeles."
Käveri ASP.NET kodutöö kaitsmistest meelde jäänud soovitus, mida ta jõudis korrata mitmeid kordi: "Ärge kirjutage võimaluse korral koodi eesti keeles, kuna reaalses elus toimub kogu töö ainult inglise keeles."
=== Veebiteenuse retsensioon - Hops ===
==== 1. Töö vastavus esitatud tingimustele ====
Näib, et aru ei ole saadud punktist "Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes." WebAPI projektis on KasutamineController koos Post meetodiga, kasutusstatistika muutmiseks? Et siis REST teenuse kasutamise statistikat ei koguta. Tabel on küll olemas.
==== 2. Programmikoodi loetavust ning kommenteeritus ====
OK, silm puhkab hetkel. Loetav ja kommenteeritud, kus vaja. Kommentaare väga ei leidnud aga samas, polnud ka mingeid häkke, millel kommentaare oleks vaja olnud.
==== 3. Dokumentatsioon ====
Wikis olemas, midagi.
==== 4. Puudused ====
DAL projektis Contracts kataloogis olevatest Repository failidest ei saanud väga aru, miks peaks neid iga mudeli jaoks eraldi olema. Samas, nii õpetati ja tuleviku mõttes on OK. Sisuliselt need liidesed ei lisa põhiliidesele IEFRepository-le mitte midagi peale täpsustava tüübi.
DAL projekti Context faili on jäänud meetod LisaKasutamine(), ilmselt arenduse ajast jäänud. "Public" juurdepääsuga ilmselt ei ole õige, samuti ilmselt hüppab välja Intelli-sense autocomplete popup-is.
Models projektis mõjub võõrastavalt "*Mall" nimelised põhiklassid. Midagi valesti ei ole, aga ...teistmoodi. Meenutab matemaatikatunnis nähtud ilma seierita spidomeetrit. Mall nimelisi klasse on loodu igale Models kataloogis oleva klassi kohta. Ilmselt on püütud eraldada andmeannotatsioone äriloogikast? Samas, mudelites äriloogilisi funktsioone/meetodeid ei ole. Võivad tulla aga ka sel juhul ei ole olulist eelist kui klassi muutujad on eraldi mallide klassides.
WebAPI projektis on kontrollerisse kirjutatud koodi, mis on repositooriumi mustri klassides olemas. Näiteks, kasutatakse kontrolleris andmeallika konteksti. Repositoorium võimaldab sellist koodi mitte kirjutada aga kontrolleris on see olemas. Samas, näiteks objektide salvestamisel antakse ülesanne repositooriumile. Sama moodi saaks ka Get() meetodites teha.
Salvestamisel ei ole valideerimine ja tegevuse õnnestumise kontroll eriti tugev.
XmlFormatter on eemaldatud. Eeldame, et xml-ina vastust paluv http klient saab json-i vastuse. Tundub ülekohus olevat. Ka xml-i söövat klienti peab toitma, eriti kui raamistik seda vaikimisi teeb sinu eest, vastavalt kliendi palvele.
==== Lõppsõna(d) ====
Ärge siis meie tiimi retsenseerimisel näkku lööge, tuginedes eelnevale jutule :)
Üldiselt oleks rohkem oodanud. Samas, kui vaadata palju vaeva kulus endal samasuguse "poolpiduse" asja tegemiseks, siis kiitus tiimile. Põhiasjad on selged, detailid ja iluasjad vajavad veel panust. Loomulikult jäid eespool olevast kriitikast välja kõik kiidusõnad, muidu oleks retsensioon tulnud liiga pikk. Head mõtted oleme juba enda projekti sisse ringi tõstmas.


== Klientrakendus ==
== Klientrakendus ==

Revision as of 22:16, 31 May 2013

Meeskond "Leemur"

  • Liikmed
    • Marika Mäemets
    • Rasmus Hommuk
    • Mairo Puusepp
    • Einar Kivisalu

Idee

Et käesoleval hetkel on aktuaalne teedelagunemine ja augud tekivad igalepoole üleöö, siis on meie XML asfaldiaukude teemaline.

XML

XML fail

<?xml version="1.0" encoding="utf-8"?>
<teeauk>
  <tänavad>
    <tänav id = "CU00609359" tyyp = "tänav">
      <nimi>Raja</nimi>
      <pikkus yhik="meeter">856</pikkus>
      <augud>
        <auk id = "1">
          <xkoord>6584427.3</xkoord>
          <ykoord>537660</ykoord>
          <sügavus yhik="meeter">0.08</sügavus>
          <pindala yhik="ruutmeeter">0.4</pindala>
          <teataja id = "1">
            <nimi>Peeter Linnakodanik</nimi>
            <roll>autojuht</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-04-10</likvideeritud>
        </auk>
        <auk id = "2">
          <xkoord>6584348.6</xkoord>
          <ykoord>537658.6</ykoord>
          <sügavus yhik="meeter">0.8</sügavus>
          <pindala yhik="ruutmeeter">0.54</pindala>
          <teataja id = "1">
            <nimi>Peeter Linnakodanik</nimi>
            <roll>autojuht</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00464822" tyyp = "tänav">
      <nimi>Ehitajate tee</nimi>
      <pikkus yhik="meeter">23</pikkus>
      <augud>
        <auk id = "3">
          <xkoord>6584526.2</xkoord>
          <ykoord>537923.8</ykoord>
          <sügavus yhik="meeter">0.9</sügavus>
          <pindala yhik="ruutmeeter">0.5</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
        <auk id = "4">
          <xkoord>6584655.9</xkoord>
          <ykoord>537637.5</ykoord>
          <sügavus yhik="meeter">0.6</sügavus>
          <pindala yhik="ruutmeeter">0.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
        <auk id = "5">
          <xkoord>6584532</xkoord>
          <ykoord>537954.2</ykoord>
          <sügavus yhik="meeter">0.6</sügavus>
          <pindala yhik="ruutmeeter">1.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00464824" tyyp = "tänav">
      <nimi>Sõpruse puiestee</nimi>
      <pikkus yhik="meeter">4623</pikkus>
      <augud>
        <auk id = "6">
          <xkoord>6584621.1</xkoord>
          <ykoord>538267</ykoord>
          <sügavus yhik="meeter">0.11</sügavus>
          <pindala yhik="ruutmeeter">2.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>

    <tänav id = "CU00072238" tyyp = "tänav">
      <nimi>Ranna tee</nimi>
      <pikkus yhik="meeter">623</pikkus>
      <augud>
        <auk id = "11">
          <xkoord>6587966.2</xkoord>
          <ykoord>531049.2</ykoord>
          <sügavus yhik="meeter">0.07</sügavus>
          <pindala yhik="ruutmeeter">0.25</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00072411" tyyp = "tänav">
      <nimi>Ranna tee</nimi>
      <pikkus yhik="meeter">1023</pikkus>
      <augud>
        <auk id = "12">
          <xkoord>6587827.8</xkoord>
          <ykoord>531034.3</ykoord>
          <sügavus yhik="meeter">0.07</sügavus>
          <pindala yhik="ruutmeeter">0.75</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00069699" tyyp = "maantee">
      <nimi>Klooga mnt</nimi>
      <pikkus yhik="meeter">623</pikkus>
      <augud>
        <auk id = "13">
          <xkoord>6588082</xkoord>
          <ykoord>531159.8</ykoord>
          <sügavus yhik="meeter">0.16</sügavus>
          <pindala yhik="ruutmeeter">0.75</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>

    <tänav id = "CU02094396" tyyp = "tänav">
      <nimi>Nõlvaku tänav</nimi>
      <pikkus yhik="meeter">823</pikkus>
      <augud>
        <auk id = "11">
          <xkoord>6579325.4</xkoord>
          <ykoord>536312.7</ykoord>
          <sügavus yhik="meeter">0.11</sügavus>
          <pindala yhik="ruutmeeter">1.55</pindala>
          <teataja id = "4">
            <nimi>Ülo Vallavanem</nimi>
            <roll>Vallavanem</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
  </tänavad>

</teeauk>

XSD fail

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchema1"
    targetNamespace="http://tempuri.org/teeauk.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/teeauk.xsd"
    xmlns:mstns="http://tempuri.org/teeauk.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:simpleType name="yhikpikkus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="meeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="yhiksygavus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="meeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="yhikpindala">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ruutmeeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="teeauk">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs ="0" maxOccurs="unbounded" name="tänavad">
          <xs:complexType>
            <xs:choice>
              <xs:element minOccurs ="0" maxOccurs="unbounded" name="tänav">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="nimi" type="xs:string"></xs:element>
                    <xs:element name="pikkus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:int">
                            <xs:attribute name="yhik" type="yhikpikkus"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="augud">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="auk">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="xkoord" type="xs:double"></xs:element>
                                <xs:element name="ykoord" type="xs:double"></xs:element>
                                <xs:element name="sügavus">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:double">
                                        <xs:attribute name="yhik" type="yhiksygavus"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="pindala">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:double">
                                        <xs:attribute name="yhik" type="yhikpindala"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="teataja">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="nimi" type="xs:string"></xs:element>
                                      <xs:element name="roll" type="xs:string"></xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="id" type="xs:int"></xs:attribute>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="avastatud" type="xs:date"></xs:element>
                                <xs:element name="likvideeritud" type="xs:date" minOccurs ="0"></xs:element>
                              </xs:sequence>
                              <xs:attribute name="id" type="xs:int"></xs:attribute>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:string"></xs:attribute>
                  <xs:attribute name="tyyp" type="xs:string"></xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT failid

Asfaldiaukude tabel

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Asfaldiaugud üle kogu maa</title>
      </head>
      <body>
        <h1>Asfaldiaukude nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav">
            <li>
              <xsl:value-of select="nimi"/>
              <xsl:text> </xsl:text>
              <xsl:value-of select="@tyyp"/>
              <xsl:text>-</xsl:text>
              <xsl:value-of select="pikkus"/>
              <xsl:value-of select="@yhik"/>
              <xsl:text>-</xsl:text>
                <table border="1">
                  <th>
                    <td>Koordinaadid</td>
                    <td>Sügavus ja pindlala</td>
                    <td>Teavitaja</td>
                    <td>Avastatud</td>
                    <td>Likvideeritud</td>
                  </th>
                  <xsl:for-each select="augud/auk">
                    <tr>
                      <td>
                        <xsl:value-of select="@id" />
                      </td>
                      <td>
                        <xsl:text>X </xsl:text>
                        <xsl:value-of select="xkoord" />
                        <br/>
                        <xsl:text>Y </xsl:text>
                        <xsl:value-of select="ykoord" />
                      </td>
                      <td>
                        <xsl:value-of select="sügavus" />
                        <br/>
                        <xsl:value-of select="pindala" />
                      </td>
                      <td>
                        <xsl:value-of select="teataja/nimi" />
                        <br/>
                        <xsl:value-of select="teataja/roll" />
                      </td>
                      <td>
                        <xsl:value-of select="avastatud" />
                      </td>
                      <td>
                        <xsl:value-of select="likvideeritud" />
                        <xsl:text>.</xsl:text>
                      </td>
                    </tr>
                  </xsl:for-each>
                </table>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Aukudest teatajad

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Asfaldiaugud üle kogu maa</title>
      </head>
      <body>
        <h1>Aukudest teatajate nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav/augud/auk/teataja">
            <li>
              <xsl:value-of select="./nimi"/>
              <xsl:text> - </xsl:text>
              <xsl:value-of select="./roll"/>
              <xsl:text> </xsl:text>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Tänavate nimekiri

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Teede/tänavate nimekiri</title>
      </head>
      <body>
        <h1>Teede/tänavate nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav">
            <li>
              <xsl:value-of select="./nimi"/>
              <xsl:text> - </xsl:text>
              <xsl:value-of select="./pikkus"/>
              <xsl:text> meetrit </xsl:text>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Retsensioonid

XML

XML

XML-failis on 6 loogilist dimensiooni. Tasemete kaupa välja kirjutatuna: tase 1: teeauk tase 2: tänavad tase 3: tänav (atribuudid: tüüp) tase 4: nimi, pikkus, augud tase 5: auk tase 6: xkoord, ykoord, sügavus, pindala, teataja, avastatud, likvideeritud. Atribuute on kasutatud nõuetele vastavas koguses. Taseme "tänav" juurde on loodud atribuut "tyyp", mis võib olla kas "tänav" või "maantee". Rühma Leemur oleks võinud paari sõnaga kommenteerida, miks on tänava ja maantee eristamine oluline.

XSD

XSD-faili põhjal võib aukudega tänavaid ka üldse mitte eksisteerida või olla piiramata arv. Põhimõtteliselt võiks tänavate arv olla piiratud mõne mõistliku numbriga, aga samas ei tohiks ka piiramata arv olla probleem. Dimensioon "tänavad" sisaldab järgmise tasemena elemente tüübist "tänav". Miks on sealjuures taseme "tänavad" elementide kirjeldamiseks kasutatud tag'i "choise", mille sees on ainult üks element? Dimensiooni "tänavad" elemendid peavad olema kirjeldatud kindlas järjekorras (nimi, pikkus, augud). Koodi loetavuse seisukohalt on hea, kui see nii on. Atribuutide kirjelduses võiks ehk augu pindala ja sügavus olla lubatud kirjeldada ka vastavalt sentimeetrites ja ruutsentimeetrites.

XSL

XSL-faile on kokku 3, mida on rohkem kui minimaalselt nõutud- 2. Asfaldiaukude tabel Tabelis on augu id, koordinaadid, pindala, teataja nimi ja roll, avastamise ja likvideerimise kuupäev. Aukudest teatajate tabel Tabelis näidatakse teatajate nimesid ja rollisid. Tänavate tabel Näidatakse tänavanimesid koos tänavate pikkustega. Mõne sõnaga võiks ehk kirjeldada, millist eesmärki html-kujule teisendatud tabelid kasutaja seisukohast võiksid täita.

Kokkuvõtvalt võib öelda, et meeskond "Leemur" on oma XML-, XSD -ja XSL-failid koostanud loogiliselt ja hästi struktureeritult.

Meeskond TeravC


Tiim "Leemur" on pakkunud välja XML liidese definitsiooni tänavaaukude kohta käiva info edastamiseks. Teema on igati ajakohane ning antud lahendus omab ka reaalset rakendust näiteks autojuhi GPS tarkvaras. Iseasi, et andmemahu kokkuhoiu mõttes võibolla oleks kasulik terved kohad edastada aukude asemel.


Esitatud lahendus vastab kodutöös nõutud tingimustele ja ootustele keerukuse osas ning isegi ületab neid. XML faili struktuur on arusaadav ja lisakommentaare ei vaja. Näidisena välja pakutud XSLT abil õnnestub genereerida väljund nii HTML kui XML formaadis.


Andmete grupeerimine tänavate kaupa tundub mõistlik arvestades potentsiaalse info tarbija vajadust saada infot parasjagu läbitava tänava kohta. Tänava pikkuse esitamise vajadusest ei saa hästi aru. Aukudel on ka omadus taastekkida, antud struktuur võimaldab aga esitada ühe(viimase?) teataja ning parandaja. Rakenduse võib muidugi luua selliselt, et uuesti teatades muutub parandaja väli väljund XML'is uuesti tühjaks. samas oleks hea info aukude kohta, mis pidevalt lagunevad ja parandatud saavad.


XML välja nimetuses täpitähtede kasutamine ei pruugi olla alati hea mõte, ehkki on loomulikult lubatud.

Meeskond Hops


Veebiteenus

Jätkame asfaldiaukude teemaga, kuna tänavate seisukord on endiselt päevakorral olev teema ja ei ole näha, et see aktuaalsuse minetaks.

Veebiteenus peab olema valmis ja ja wikilehel kirjeldatud hiljemalt 20. mai 2013.

Retsensioonid veebiteenuste kohta peavad tehtud olema 27. mai 2013

  • Loodav veebiteenus peab võimaldama:
    • Teenuse pakkumist
    • Teenuse kasutajate tuvastamist ning haldamist
    • Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes

Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).

plaanitav funktsionaalsus

 - teha teenus, mis väljastab viimased lisatud augud
 - teha teenus, mis väljastab valitud tänaval asuvad augud
 - teha teenus, mis väljastab kõige suurema aukude arvuga tänavad (suhtes pikkusega)
 - teha teenus, mis ...
 - teha teenus, mis ...

Tööde edenemine

 - Versioonihaldus ülesse seada - Asjassepühendatute jaoks paikneb see siin: https://leemur.visualstudio.com/ 15.05.2013.
 - Andmebaasiserver töökorda seada (OK - Rasmus). Installeeritud MS SQL Express 12 (version 11.0.3128.0) 16.05.2013
 - Domeeni mudel valmis teha - OK
 - EF raamistik paika () - OK
 - Luua standard Repod iga objekti klassi kohta (I{KlassiNimi}Repository + {KlassiNimi}Repository)
   Olemas AukRepository, EFRepositories, KasutusRepository, RollRepository, TanavRepository, TeavitajaRepository
    
 - Funktsionaalsuse teostus (Controllers) (Get + Post + Put + Delete) - OK
    
 - Autentimine, Autoriseerimine - veidi problemaatiline.

Veebiteenuse koodi võib leida siit: http://enos.itcollege.ee/~rhommuk/Poska/Asfaldiauk.zip 20.05.2013.
Realiseeritud meetodite testimiseks on kasutatav aadress ~/Help

Veebiteenuse retsensioon - TeravC

Enne retsenseerima asumist meeskonna Leemur poolt esitatud teadaolevad puudused

"Retsenseerides võib kohe kirja panna, et autentimist ega kasutajate statistikat ei ole ... meil on ainult teenus lahendatud."

Arhitektuuriline ja tehnoloogiline ülesehitus

Lahendus on vastavalt kursuse nõuetele ülesse ehitatud, eraldi seisvad projektid eri otstarbega teekidena:

  • Andmemudeli teek (AsfaldiaukModels),
  • Andme ligipääsu teek (AsfaldiaukDAL),
  • Teenuse enda teostus (AsfaldiaukWebAPI).

Testide tegemiseks loodud ka konsoolirakendus AsfaldiaukTest. Kasutusel Code first Entity Framework andmeligipääsu kihis, ning ASP.NET Web API teenuste poole pealt. Projekti luues oleks võnud "Create unit test projecti" lahtrisse linnukese teha kuid kuna antud raames me unit teste ei kirjuta siis liiga oluline see ei ole.

Domeeni mudel

Natuke on ka arusaamatu, milleks on väljaminevad seosed defineeritud eraldi klassides. Annotatsioonid on täiesti olemas kuid võiks võib-olla kohati natuke rohkem lubatud olla, näiteks AukMall.cs public string Kommentaar lubab 50 tähemärki, mille sisse tekst "Selline pirakas teeauk, et lõhkusin autol parempoolse esiratta ja midagi veel." juba enam ära ei mahu.

Andmeligipääsu kiht

Andmeligipääsu kiht (DAL) teostatud nii, nagu kursusel õpetatud. Võetud kasutusele valmiskirjutatud IEFRepository.cs + EFRepositor.cs Dependency resolver osas kasutusel Ninject ja loodud ka vajalik dummy IAsfaldiaukContext.cs interface selle toimimiseks. Migrations->configuration.cs all võiks internal sealed class... muuta publicuks.

Web API teenus

Peale konsoolirakenduse käivitamist ning andmete baasi saamist võis asuda ka teenust testmima. Nii konsoolirakenduse kui webAPI connectionstring oli määratud (localdb)\v11.0, mille tõttu oli loodud baas kohe hõlpsasti leitav. Baasi loomise/muutmise osas on arendusfaasis kasutatud strateegiat DropCreateDatabaseAlways.

Web API teenus töötab, näitena: api/auk väljastab aukude nimekirja. Teenus annab andmeid JSON formaadis. Controllerid koos vajalike CRUD meetoditega olid kohandatud vastavalt vajadustele ja loodud igale klassile.

Testimine

Testid erinevate klasside peal, kus olid CRUD meetodid kirjeldatud:

GET api/tanav

HTTP päringu sisu:

 GET http://localhost:49407/api/tanav HTTP/1.1
 User-Agent: Fiddler
 Host: localhost:49407

HTTP vastus päringule:

 HTTP/1.1 200 OK
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcb2RhbGJlcmdcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlcdGFuYXY=?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 00:20:36 GMT
 Content-Length: 78
 [
   {
     "TanavID": 1,
     "Nimi": "Mustamae",
     "Pikkus": 3.87
   }
 ]
GET api/tanav/1

Sama vastus nagu eelmine.

GET api/tanav/2

HTTP päringu sisu:

 GET http://localhost:49407/api/tanav/2 HTTP/1.1
 User-Agent: Fiddler
 Host: localhost:49407

HTTP päringu vastus:

 HTTP/1.1 404 Not Found
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcb2RhbGJlcmdcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlcdGFuYXZcMg==?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 00:23:21 GMT
 Content-Length: 44
 "Sellise id-ga tänavat andmebaasis ei ole!"
POST

HTTP POST päringu sisu:

 POST http://localhost:49407/api/roll HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json
 Content-Length: 57
 
   {
     "RollID": 1,
     "Nimi": "sample string 2"
   }

HTTP POST päringu vastus:

 HTTP/1.1 201 Created
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Location: http://localhost:49407/Help?id=1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbA==?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:05:28 GMT
 Content-Length: 0
PUT

HTTP Päringu sisu:

 PUT http://localhost:49407/api/roll/1 HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json
 Content-Length: 55
 
   {
     "RollID": 1,
     "Nimi": "new Role name"
   }

HTTP Päringu vastus:

 HTTP/1.1 204 No Content
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbFwx?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:08:50 GMT
DELETE

HTTP Päringu sisu:

 DELETE http://localhost:49407/api/roll/1 HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json

HTTP Päringu vastus:

 HTTP/1.1 204 No Content
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbFwx?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:12:29 GMT


Peale Fiddleriga läbi proovimist said retsenseerijad teada, et meeskond Leemur on realiseerinud /help controlleri, mille kaudu on võimalik ilma Fiddleri abita kõikides controllerites realiseeritud CRUD meetodeid hõlpsasti testida. Teatavasti topelt ei kärise ja sai ka /help uuritud, kus kõik toimis kenasti.

Kodeerimise stiil ja parimad praktikad

Stiil oli okei, kommentaare võiks alati rohkem olla. Ära ei olnud märgitud viited kui oli kasutatud weebi ja õppejõudude materjali abi. Iga projekti Referencide nimekirja vaadates ei hakanud midagi kummalist silma, kõik on selliselt nagu peab. Controllerite osas võiks tuleviku tarbeks luua ja eraldada api controllerid ning tavalised/view eraldi kaustadesse lihtsama jälgitavuse tarbeks. Käveri ASP.NET kodutöö kaitsmistest meelde jäänud soovitus, mida ta jõudis korrata mitmeid kordi: "Ärge kirjutage võimaluse korral koodi eesti keeles, kuna reaalses elus toimub kogu töö ainult inglise keeles."


Veebiteenuse retsensioon - Hops

1. Töö vastavus esitatud tingimustele

Näib, et aru ei ole saadud punktist "Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes." WebAPI projektis on KasutamineController koos Post meetodiga, kasutusstatistika muutmiseks? Et siis REST teenuse kasutamise statistikat ei koguta. Tabel on küll olemas.


2. Programmikoodi loetavust ning kommenteeritus

OK, silm puhkab hetkel. Loetav ja kommenteeritud, kus vaja. Kommentaare väga ei leidnud aga samas, polnud ka mingeid häkke, millel kommentaare oleks vaja olnud.


3. Dokumentatsioon

Wikis olemas, midagi.


4. Puudused

DAL projektis Contracts kataloogis olevatest Repository failidest ei saanud väga aru, miks peaks neid iga mudeli jaoks eraldi olema. Samas, nii õpetati ja tuleviku mõttes on OK. Sisuliselt need liidesed ei lisa põhiliidesele IEFRepository-le mitte midagi peale täpsustava tüübi.

DAL projekti Context faili on jäänud meetod LisaKasutamine(), ilmselt arenduse ajast jäänud. "Public" juurdepääsuga ilmselt ei ole õige, samuti ilmselt hüppab välja Intelli-sense autocomplete popup-is.

Models projektis mõjub võõrastavalt "*Mall" nimelised põhiklassid. Midagi valesti ei ole, aga ...teistmoodi. Meenutab matemaatikatunnis nähtud ilma seierita spidomeetrit. Mall nimelisi klasse on loodu igale Models kataloogis oleva klassi kohta. Ilmselt on püütud eraldada andmeannotatsioone äriloogikast? Samas, mudelites äriloogilisi funktsioone/meetodeid ei ole. Võivad tulla aga ka sel juhul ei ole olulist eelist kui klassi muutujad on eraldi mallide klassides.

WebAPI projektis on kontrollerisse kirjutatud koodi, mis on repositooriumi mustri klassides olemas. Näiteks, kasutatakse kontrolleris andmeallika konteksti. Repositoorium võimaldab sellist koodi mitte kirjutada aga kontrolleris on see olemas. Samas, näiteks objektide salvestamisel antakse ülesanne repositooriumile. Sama moodi saaks ka Get() meetodites teha.

Salvestamisel ei ole valideerimine ja tegevuse õnnestumise kontroll eriti tugev.

XmlFormatter on eemaldatud. Eeldame, et xml-ina vastust paluv http klient saab json-i vastuse. Tundub ülekohus olevat. Ka xml-i söövat klienti peab toitma, eriti kui raamistik seda vaikimisi teeb sinu eest, vastavalt kliendi palvele.


Lõppsõna(d)

Ärge siis meie tiimi retsenseerimisel näkku lööge, tuginedes eelnevale jutule :) Üldiselt oleks rohkem oodanud. Samas, kui vaadata palju vaeva kulus endal samasuguse "poolpiduse" asja tegemiseks, siis kiitus tiimile. Põhiasjad on selged, detailid ja iluasjad vajavad veel panust. Loomulikult jäid eespool olevast kriitikast välja kõik kiidusõnad, muidu oleks retsensioon tulnud liiga pikk. Head mõtted oleme juba enda projekti sisse ringi tõstmas.

Klientrakendus

Klientrakendused peavad olema valmis ja wikilehel kirjeldatud hiljemalt 10. juuni 2013. Retsensioonid veebiteenuste kohta peavad tehtud olema 15. juuni 2013

Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.

Variant1: teha klientrakendus enda loodud veebiteenusele