Meeskond:MS-TO

From ICO wiki
Jump to navigationJump to search

MS-TO

Meeskonna liikmed

  • Margus Roo
  • Silja Saar
  • Tõnis Luik
  • Ott Kingisepp

XML Retsensioonid

  • XML faili kodutöö retsensioon meeskonnale /* Anonüümsed koodikommentaatorid */ [1]


Käesolevas retsensioonis analüüsitakse meeskonna “Anonüümsed koodikommentaatorid” poolt koostatud XML andme-, skeemi- ning transformatsiooni faile.


XML faili teemaks on filmikogu, mis sisaldab loetelu filmidest, koos informatsiooniga nende žanrite, valmimisaasta, sisu ning näitlejate kohta. Samuti sisaldub failis teemakohane pildimaterjal.


XML faili struktuur on loogilise ülesehitusega. Selles leidub XML-andmetele kohustuslik versioonideklaratsioon ning juurelement. Parema loetavuse huvides on kasutatud treppimist. Filmide sisukirjelduste juures on kasutatud CDATA-t, millega on tagatud, et HTML-is võib koodi kasutada muretsemata, et kirjelduse tekstis sisalduvad märgid võiksid XML faili struktuuri hilisemat kasutamist häirida. Koosatud XML fail valideerub.


Skeemifail on koostatud korrektselt, komplekstüüpe on kasutatud otstarbekalt. Lisaks on kasutatud required-elementi, mis viitab sellele, et meeskond on detailidele piisavat rõhku pannud. Samuti on positiivne minOccurs-i / maxOccurs-i kasutamine, mis näitab skeemifaili head läbimõeldust.


Transformatsiooni faile on esitatud kaks – pisut erineva informatsiooni hulga ning rõhuasetusega. Failide ülesehitus on otstarbekas. Kasutatud on css-i. Samatüübiliste andmete korduste jaoks tsükli loomiseks puhul on kasutatud for-each, select käsklust. Meeskonna poolt esitatud transformatsiooni failid annavad XML struktuuriga loodud sisu edukalt edasi.


Kokkuvõtteks: Meeskonna töö tulemusest väljendub, et meeskonna liikmed oskavad XML- ja XSL failidega töötada. Samuti teostada XML formaadilt HTML formaadile üleminekuid ning valdavad XSL võimalusi. Soovituseks niipalju, et ühtlase stiili hoidmiseks tuleks valida kas kasutada elementide nimedena läbivalt eesti- või inglise keelt.

Teenuse retsensioon

Sissejuhatus

Käesolev dokument on retsensioon meeskonna HMR projektile “NutiHoone”. Projekti eesmärk on koguda hoonest või hoone osast andurite andmeid ja kogutud andmeid visuaalselt esitleda rakenduse kaudu ennast tuvastavatele kasutajatele.

Retsensiooni esitaja soovib toonitada, et ei ole .Net arendusvahendite ja meetodite ekspert, seega võib tagasisides olevad osad tuleneda pigem dokumendi koostaja vähesest kogemusest, mitte projekti teostajate vajakajäämistest. Kuna antud retsensiooni looja keskendus teenuse poole hindamisele, siis kogu rakenduse funktsionaalset poolt ei hinnatud, pigem uuris testija kuidas on teenuse koodiosa realiseeritud.

Paigaldusprotsess

Arendajate soovitusel püüdis retsensiooni koostaja paigaldada esimese sammuna teenust, mida oli võimalik alla laadida VisualStudio projektifailina. Vaikimisi oli käivitatav projekt “DAL”, mida VisualStudio käivitada ei suutnud. Projekti struktuuri uurides oli loogiline valik vaikimisi projektiks seadistada “WebApiApp”, peale mida teenus käivitus ja testijal avanes veebilehitsejas ASP.NET projekti vaikimisi lehekülg.

Järgmise sammuna laadis retsensiooni kirjutaja rakenduse oma arvutisse ja pakkis lahti. Rakenduse puhul oli vaikimisi projekt seadistatud õige ja peale VisualStudio’s käivitamist ilmus ka veebileheküljel rakendusevaade. Lähtudes projektimeeskkonna poole välja toodule, et rakendus ei ole veel täiesti viimistetud ei oodanud testija täisfunktsionaalust, kuid esilehel oleks ehk oodanud minimaalset informatsiooni projekti olemusest.

Rakenduse funktsionaalsus

Kuna retsensioon keskendub projekti teenuse osale, siis antud juhul on tähelepanu kasutajaliidese visuaalsele ja funktsionaalsele osale pööratud minimaalselt. Kasutajaliidest kasutab testija ainult niipalju, et anda hinnang teenusele. Peale peakasutaja (admin@admin.ee) loomist ilmus palju intuitiivsem kuva võrreldes esilehega.

Teenus

Esmapilk teenusepoolsele koodiosale annab üsna selge ülevaate, kus midagi asub ja milleks on midagi on loodud. Õppeprogrammis esile toodud meetodeid on samuti rakendatud. Tundub, et meeskond ei ole projekti kavandades valinud kõige minimaalsemat funktsionaalsust vaid tundub, et on soovitud realiseerida ka väljaspool antud õppekava rakendatavat lahendust. Koodist on näha, et on kasutatud EntityFramework ja nn code first lähenemist, kus esmalt on kirjeldatud olemid ja nende vahelised seosed. Uurides SQL Server Object Explorer’ga andmebaasi “NutiHoone”, siis kuue olemi nõue on täidetud. Uurides tabeleid, siis selgub, et on kasutatud andmebaasi tasandil tabelite vahelisi seoseid, mida antud õppeaine ühe osana propageerib. Olemite nimed, mis andmebaasi tabeliteks on genereeritud, on arusaadavate nimedega ja ülevaatlikud. Testija pani tähele, et oli jäetud realiseerimata õppejõu poolt rangelt soovitatud atribuudid olemitele – created ja modified. Koodi läbivaatamisel oli nähe, et koodi on minimaalsel määral kommenteeritud. Testija subjektiivne arvamus on, et kui koodi üldse kommenteerida, siis peaks seda tegema inglise keeles. VisualStuudio lisab vaikimisi ka oma kommentaarid, siis antud stiili jätkamine oleks teretulnud.

Teenuse uurimisel selgus, et andmevahetusteenusena kasutatakse REST meetodit.

Teenuse koodiosa analüüsimine näitab, et projektimeeskond on rakendanud õppeaines tutvustatud metoodikat, kus kirjeldati, kuidas äriloogika ja andmevahetuskihid teineteisest eraldada. On näha, et andmeid kontrolleris initsialiseeritakse objekt, mis läbi “Interface” pakuvad meetodeid, mis realiseerivad vajalikud CRUD (Create, Read, Update, Delete) meetodid.

Testija pani tähele, et DTO (Data Transfer Object) osas oli mudelite juurde sisse jäetud “virtual” võti, mida retsensiooni kirjutaja, arvestades tema teadmiste pagasit, peab üleliigseks, kuna antud võtit kasutatakse ainult “Entity Framework” raamistikus objektidest andmebaasitabelite ja nende vaheliste seoste loomiseks. Samas on näha, et DTO kihti ei kasutata ainult seepärast, et antud metoodika oli rangelt soovitatav vaid kasutatakse ka reaalselt näiteks klassis “PersonDTO”, kus klassi omadus “FullName” realiseeritakse kahe klassi teise omaduse “FirstName” ja “LastName” abil, mida küll VisualStudio arust keegi ei kasuta. Samas tekitas küsimust, miks mõned DTO klassid on tühjad. VisualStudio omadust, mis näitab antud klassi seotust kasutades selgub, et DTO klassi “ZoneDTO” ei kasuta projektis keegi. Samuti leidis testija kasutamata meetodeid “ObjectFactory” osas.

Kokkuvõtte

MicroSoft poolt pakutavat arendusvahendit VisualStuudio on targalt ja võimalikult palju ära kasutatud. Nagu ka projekti meeskonna poolt välja on toodud, on projektis veel palju viimistlemist. Samas on realiseeritud antud aine käigus esile toodud olulisemad metoodikad. Vähese kogemusega testija sai projekti paigaldamise ja kasutamisega hakkama. Kindlasti ei ole lahendus veel päris valmis, kuid annab piisava ülevaate funktsionaalsusest.

XML andmefail

XML fail

<?xml version="1.0" encoding="UTF-8" ?>

<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com people.xsd">

	<person id="37303140314" age="41" sex="M">
		<fname><![CDATA[Margus]]></fname>
		<lname><![CDATA[Roo]]></lname>
		<email><![CDATA[margus@roo.ee]]></email>
		<phones>
			<phone status="active" number="+3725148780"/>
			<phone status="active" number="+3725148781"/>
			<phone status="unactive" number="+3725148784"/>
		</phones>
	</person>
	<person age="31" sex="M" id="38209064511">	
		<fname><![CDATA[Tõnis]]></fname>
		<lname><![CDATA[Luik]]></lname>
		<email><![CDATA[tonisluik@hotmail.com]]></email>
		<phones>
			<phone status="active" number="+3725148786"/>
			<phone status="active" number="+3725148787"/>
			<phone status="unactive" number="+3725148788"/>
		</phones>
	</person>
	<person age="32" sex="F" id="48209064522">
		<fname><![CDATA[Silja]]></fname>
		<lname><![CDATA[Saar]]></lname>
		<email><![CDATA[silja.saar@live.com]]></email>
		<phones>
			<phone status="active" number="+3725148111"/>
			<phone status="active" number="+3725148222"/>
			<phone status="unactive" number="+3725148333"/>
		</phones>
	</person>
	<person age="32" sex="M" id="38209164533">
		<fname><![CDATA[Ott]]></fname>
		<lname><![CDATA[Kingisepp]]></lname>
		<email><![CDATA[ott.kingisepp@gmail.com]]></email>
		<phones>
			<phone status="active" number="+3725118711"/>
			<phone status="active" number="+3725128722"/>
			<phone status="unactive" number="+3725128733"/>
		</phones>
	</person>
</people>

XML skeemifail

<?xml version = "1.0" encoding = "UTF-8"?>
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

  <xsd:element name = "people">
   <xsd:complexType>
    <xsd:sequence>
     <xsd:element ref = "person	" maxOccurs = "unbounded"/>
    </xsd:sequence>
   </xsd:complexType>
  </xsd:element>

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="fname" type="xs:string"/>
      <xs:element name="lname" type="xs:string"/>
      <xs:element name="email" type="xs:string"/>
	  <xs:element name="phone">
  	  	<xs:complexType>
    		<xs:sequence>
      			<xs:element name="number" type="xs:string"/>
    		</xs:sequence>
    		<xs:attribute name="status	" type="xs:string" use="required"/>
  		</xs:complexType>
	</xs:element>
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" use="required"/>
    <xs:attribute name="age" type="xs:int" use="required"/>
    <xs:attribute name="sex" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

</xs:schema>

XSLT failid

HTML [2]

<?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"/>
	<xsl:template match="/" >
		<htm>
		<head>
			<title>Persons database</title>
		</head>
		<body>
		<xsl:for-each select="people/person">
			<p><xsl:value-of select="concat(position(),' - ',fname,' ',lname)"/></p>
			<p>ID: <xsl:value-of select="@id"/></p>
			<p>Age: <xsl:value-of select="@age"/></p>
			<p>Sex: <xsl:value-of select="@sex"/></p>
			
			<p>Phones</p>
			<xsl:for-each select="phones/phone">
				<p><xsl:value-of select="@number"/></p>
			</xsl:for-each>
			
			<hr/>
		</xsl:for-each>
		</body>
		</htm>
	</xsl:template>
</xsl:stylesheet>

HTML 2 [3]

<?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"/>
	<xsl:template match="/" >
		<htm>
		<head>
			<title>Persons database</title>
		</head>
		<body>
			<h2> Meesterahvad </h2>
				<table border='1'>
					<tr bgcolor="#BFBFBF">
					  <th>Eesnimi</th>
					  <th>Perenimi</th>
					  <th>Sugu</th> 
					 </tr>
						<xsl:for-each select="/people/person[starts-with(@id, '3')]">
						<xsl:sort select="lname" order="ascending" />
						<tr>
							<td><xsl:value-of select="fname"/></td>
							<td><xsl:value-of select="lname"/></td>
							<td><xsl:value-of select="@sex"/></td>        
						</tr>
				
						</xsl:for-each>
				</table>	
		</body>
		</htm>
	</xsl:template>
</xsl:stylesheet>


Veebiteenuse analüüs

Teenus võimaldab hallata sõidupäeviku andmebaasi. Samuti kontrollib teenus kasutaja õigust teenust kasutada:

  • Kas kasutaja ja tema salasõna ühtivad
  • Hoiab kasutaja tegevuste kohta statistikat
  • Kasutaja tegi ühe CRUD tegevustest

Veebiteenus pakub SOAP tüüpi WSDL kirjeldusfailiga tutvustatud teenuseid, millede kaudu on võimalik pöörduda C# keeles koostatud objektide poole. Objektid pakuvad CRUD meetodeid objektile: Company, User, Car, Usage, BindUserCarCompany, Usage, ServiceUser. Vastavate objektide atribuutid salvestatakse andmebaasi.

Olemid

Company

  • attributes: id, name, created, modified
  • methods: add, modify, delete

Car

  • attributes: id, name, created, modified
  • methods: add, modify, delete

User

  • attributes: id, name, created, modified
  • methods: add, modify, delete

Usage

  • attributes: id, name, created, modified
  • methods: add, modify, delete

BindUserCarCompanyUsage

  • attributes: user, car, company, usage, created, modified
  • methods: add, modify, delete

ServiceUser

Tuleneb nõudest kasutajate halduse ja piirangute haldamisest

  • attributes: id, username, password, maxAllowedAccess, accessCounter, created, modified
  • methods:add, modify, delete

Antud iteratsiooni tulemusena tekib:

  • Kirjeldatud veebiteenuse pöördumispunkt
  • WSDL
  • C# keeles realiseeritud CRUD meetodid olemitele
  • Admebaas olemite atribuutide hoidmiseks

Veebiteenus

http://margus.roo.ee/SPWcfServiceLibrary_final.zip

Siin zipis VS2013 solution. Avada SPWcfServiceLibrary.sln ja panna startup projectiks SPWcfServiceHost. Seejärel panna käima ilma debuggimiseta.

Klientrakendus

http://margus.roo.ee/WebAppForSP_final.zip

Siin on klientrakendus koos admin paneeliga. Tõmmata alla ja käivitada WebAppForSP.sln. Kui on "credentialite" probleeme, siis esmalt teha Teenusele "Update Service Reference" ja seejärel läbida see (https://wiki.itcollege.ee/index.php/Praktikum:_Windows_Communication_Foundation_teenuse_turvamine,_VR2.9 ) juhend.

Projekti dokumentatsioon

Projekti dokumentatsioon [4] sisaldab nii veebiteenuse kui klientrakenduse funktsionaalsuse ja arendusprotsessi kirjeldust ning kasutajajuhendit.