1 Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky Diplomová práce Realizace on-line virtuálních sklad...
Z´apadoˇcesk´a univerzita v Plzni Fakulta aplikovan´ych vˇed Katedra informatiky a v´ypoˇcetn´ı techniky
Diplomov´ a pr´ ace
Realizace on-line virtu´ aln´ıch sklad˚ u pro podniky v r´ amci EU
Plzeˇn, 2014
Ondˇrej Trhoˇn
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 14. 5. 2014 Ondˇrej Trhoˇ n
Abstrakt Tato pr´ace se zab´ yv´a definov´an´ım specifikace poˇzadavk˚ u na webov´ y syst´em pro ˇr´ızen´ı z´asob klient˚ u v r˚ uzn´ ych zem´ıch Evropsk´e unie, jeho n´avrhem a realizac´ı. V´ ysledn´ y produkt m´a plnit u ´lohu virtu´aln´ıho skladu. V r´amci pr´ace dojde k sezn´amen´ı s t´ımto term´ınem, popisem nejpouˇz´ıvanˇejˇs´ıch technologi´ı pˇri tvorbˇe webov´ ych aplikac´ı, specifikov´an´ı a navrˇzen´ı poˇzadovan´eho syst´emu s ohledem na zvolenou technologii (ASP.NET MVC), vlastn´ı implementaci a testovac´ı nasazen´ı.
Abstract The purpose of this thesis is to define software requirements specification of web application to controlling the movement and storage of customer resources anywhere in the European Union, and to define its design and implementation. The final product will work as a virtual inventory. This thesis contains an introduction to this term, a description of the most popular technologies used to develop web applications, a specification and a draft of the desired product using the chosen technology (ASP.NET MVC), the implementation itself and a test deployment.
Podˇ ekov´ an´ı Chtˇel bych podˇekovat sv´e rodinˇe za podporu a pomoc pˇri studiu. Sv´ ym koleg˚ um a bratrovi za cenn´e technick´e rady a pˇripom´ınky. A sv´e pˇr´ıtelkyni za oporu.
C Graf z´ avislost´ı z´ akladn´ıch jmenn´ ych prostor˚ u
66
D Obsah CD
67
´ 1 Uvod
1
1
´ Uvod
V dneˇsn´ı dobˇe je pˇri prodeji zboˇz´ı kladen velk´ y d˚ uraz na cenu zboˇz´ı a cenu vedlejˇs´ıch n´aklad˚ u jako dopravn´e, skladn´e, baln´e a bankovn´ı poplatky. Jedn´ım z nejd˚ uleˇzitˇejˇs´ıch faktor˚ u pˇri prodeji zboˇz´ı je dodac´ı term´ın. Z´akazn´ıci jiˇz nejsou ochotni ˇcekat na zboˇz´ı nˇekolik t´ ydn˚ u a oˇcek´avaj´ı dod´avky just-in-time“. V r´amci ” EU odpadla d´ıky celn´ı unii povinnost procl´ıt zboˇz´ı, proˇceˇz se placen´ı celn´ıch poplatk˚ u a dan´ı v zemi kupuj´ıc´ıho st´av´a minulost´ı. Otevˇrely se tak moˇznosti vstupu na zahraniˇcn´ı trhy i pro mal´e a stˇredn´ı firmy. Nast´av´a zde ovˇsem probl´em s cenou dopravy, kter´a je nesrovnateln´a s n´aklady na dopravu v tuzemsku. Nejsou zde dopravn´ı spoleˇcnosti, kter´e um´ı pˇrepravit zboˇz´ı na dob´ırku do druh´e zemˇe. Napˇr. ˇ a poˇsta nem´a smlouvu se Slovenskou poˇstou o v´ Cesk´ ybˇeru hotovosti. Pokud se nˇejak´a takov´a firma najde, je toto velmi drah´e. V pˇr´ıpadˇe vˇetˇs´ıho prodeje napˇr. na v´ yˇse zm´ınˇen´e Slovensko se nab´ız´ı moˇznost zˇr´ızen´ı tamn´ı poboˇcky a veden´ı samostatn´eho skladu. To s sebou ale pˇrin´aˇs´ı dalˇs´ı starosti – firmu m˚ uˇze v ciz´ı zemi zaloˇzit fyzick´a osoba, ale mus´ı zde m´ıt trval´ y pobyt. Z tohoto d˚ uvodu je nutn´e zaloˇzit tzv. pr´avnickou osobu, sloˇzit z´akladn´ı kapit´al a pot´e zajistit zamˇestnance a prostory pro podnik´an´ı. Vˇse uveden´e s sebou nese zv´ yˇsen´e n´aklady v podobˇe n´ajemn´eho, platby soci´aln´ıho a zdravotn´ıho pojiˇstˇen´ı a nutnost veden´ı u ´ˇcetn´ı evidence dle z´akon˚ u pˇr´ısluˇsn´eho st´atu. Pravdˇepodobnˇe lepˇs´ı moˇznost´ı je vyuˇzit´ı tzv. virtu´aln´ıch sklad˚ u“, o kter´ ych ” se zmiˇ nuje anglick´ y podnikatel Richard Koch ve sv´e knize The 80/20 Principle [1]. Nejedn´a se o pouh´ y pron´ajem skladov´eho prostoru, ale o jeho virtualizaci“, kdy ” sv˚ uj sklad ˇclovˇek ˇr´ıd´ı on-line skrze webov´e rozhran´ı. Tento syst´em m´a minimalizovat n´aklady na obou stran´ach – jak na stranˇe firmy, kter´a virtu´aln´ı sklady vyuˇz´ıv´a, tak poskytovatele tˇechto sklad˚ u, kter´ y se m˚ uˇze soustˇredit na pˇredmˇet svoj´ı ˇcinnosti – outsourcing skladov´an´ı, balen´ı a expedov´an´ı – a dˇelat to podstatnˇe levnˇeji. C´ılem t´eto pr´ace je vytvoˇrit takov´ y syst´em, kter´ y bude umoˇzn ˇovat spr´avu ˇ virtu´aln´ıch sklad˚ u pro jednotliv´e z´akazn´ıky v Cech´ach, na Slovensku a v Polsku a bude snadno rozˇs´ıˇriteln´ y o dalˇs´ı funkce (napˇr. usnadnˇen´ı pr´ace pomoc´ı ˇcteˇcky ˇca´rov´ ych k´od˚ u, zobrazen´ı kamerov´ ych z´aznam˚ u z balen´ı, . . . ), bude integrov´an do st´avaj´ıc´ı firemn´ı infrastruktury a v pˇr´ıpadˇe, ˇze nebude na nˇejak´ y syst´em pˇr´ımo napojen, bude jej nahrazovat (napˇr. syst´em pro spr´avu novinek, akc´ı apod.). V´ ysledn´a webov´a aplikace by mˇela umoˇzn ˇovat pˇrep´ın´an´ı do dan´ ych jazyk˚ u a filtraci dat. Velk´ y d˚ uraz by mˇel b´ yt kladen i na uˇzivatelsk´e ovl´ad´an´ı, kter´e mus´ı b´ yt jednoduch´e a intuitivn´ı.
2 E-logistika
2
2
E-logistika
Nejprve je nutn´e definovat logistick´e ˇr´ızen´ı jako takov´e. V [2] je logistick´e ˇr´ızen´ı definov´ano jako proces pl´anov´an´ı, realizace a ˇr´ızen´ı efektivn´ıho, v´ ykonn´eho toku a skladov´an´ı zboˇz´ı, sluˇzeb a souvisej´ıc´ıch informac´ı z m´ısta vzniku do m´ısta spotˇreby, jehoˇz c´ılem je uspokojit poˇzadavky z´akazn´ık˚ u. V dneˇsn´ı dobˇe se d´ıky internetu a jeho potenci´alu rozˇs´ıˇril trh i do elektronick´e podoby, coˇz dalo vzniknout nov´emu odvˇetv´ı v podnik´an´ı – e-businessu. E-logistika je logistick´ y syst´em, kter´ y je integr´aln´ı souˇca´st´ı e-businessu. V jeho r´amci zajiˇst’uje logistick´e toky pro potˇreby dalˇs´ıch d´ılˇc´ıch ˇc´ast´ı e-businessu jako napˇr´ıklad e-commerci. Charakteristick´ ym rysem e-logistiky je sbˇer, pˇrenos, zpracov´an´ı a uchov´an´ı dat a informac´ı za vyuˇzit´ı informaˇcn´ıch technologi´ı jako jsou napˇr´ıklad internet nebo intranet. [3] Vˇsechny procesy v distribuˇcn´ı firmˇe m˚ uˇzeme rozdˇelit na procesy, kter´e prov´ad´ı vlastn´ı logistickou ˇcinnost jako je pˇreprava zboˇz´ı, skladov´an´ı zboˇz´ı, atd., a procesy, kter´e pˇrin´aˇsej´ı informace jako administrativu, marketing a prodej sluˇzeb. Tyto procesy lze pˇrev´est do elektronick´e podoby a zpracov´avat za pomoci e-business aplikac´ı. T´ım m˚ uˇze doj´ıt k podstatn´emu sn´ıˇzen´ı celkov´ ych n´aklad˚ u. Profesor Frankel z Massachusetts Institute of Technology (MIT) uv´ad´ı hodnotu aˇz 40%. Z v´ yzkumu mezin´arodn´ıho obchodu proveden´eho na MIT vyplynulo, ˇze z celkov´e hodnoty logistick´ ych sluˇzeb ve v´ yˇsi 1 billionu USD tvoˇr´ı hodnotu sluˇzeb, kter´e lze pˇrev´est do e-podoby, pˇribliˇznˇe jednu tˇretinu. [4]
2.1
Supply Chain Management (SCM)
SCM, neboli ˇr´ızen´ı dodavatelsk´eho ˇretˇezce, je oznaˇcen´ım pro syst´emy, prostˇredky a postupy, kter´e slouˇz´ı pro koordinaci materi´al˚ u, v´ yrobk˚ u, sluˇzeb, informac´ı a financ´ı, kter´e plynou od dodavatel˚ u surovin pˇres zpracovatele, v´ yrobce, velkoobchodn´ıky a maloobchodn´ıky, aˇz ke spotˇrebitel˚ um. Cel´ y proces zaˇc´ın´a zad´an´ım objedn´avek, jejich posouzen´ım a zpracov´an´ım, pokraˇcuje v´ yrobou a dod´an´ım zboˇz´ı a sluˇzeb a konˇc´ı zpˇetnou vazbou. C´ılem SCM je dosaˇzen´ı efektivn´ıho vyuˇzit´ı vˇsech zdroj˚ u vstupuj´ıc´ıch do procesu, vˇcasn´e dod´an´ı vˇsech v´ yrobk˚ u a sluˇzeb, rychlost procesu, minimalizace prostoj˚ u a nulov´e ztr´aty. [5] Dle definice SCOR (Supply Chain Operation Model) je moˇzn´e SCM rozdˇelit do pˇeti z´akladn´ıch ˇc´ast´ı [6]: 1. Pl´ anov´ an´ı – strategick´a ˇc´ast SCM nutn´a k ˇr´ızen´ı vˇsech zdroj˚ u smˇerem k naplnˇen´ı poˇzadavk˚ u z´akazn´ıka na v´ yrobek nebo sluˇzbu. Souˇca´st´ı je definice sady metrik k monitorov´an´ı cel´eho ˇretˇezce.
2 E-logistika
3
2. N´ akup – v´ ybˇer dodavatele, materi´alu, resp. sluˇzeb potˇrebn´ ych pro realizaci vlastn´ı produkce. Souˇca´st´ı je ocenˇen´ı dod´avky, dodac´ı a platebn´ı podm´ınky a n´asledn´e monitorov´an´ı tohoto vztahu. 3. V´ yroba – v´ yroba, rozvrhov´an´ı ˇcinnost´ı a operac´ı nutn´ ych pro v´ yrobu, testov´an´ı, balen´ı a pˇr´ıprava expedice. Tato ˇc´ast je nejv´ıce n´aroˇcn´a na mˇeˇren´ı kvality a produktivity zamˇestnanc˚ u. 4. Distribuce – ˇca´st ˇretˇezce, kter´a je mnoh´ ymi oznaˇcov´ana jako logistika. Koordinuje pˇr´ıjem zak´azek od z´akazn´ıka, vyuˇz´ıv´a sklady a transportn´ı moˇznosti k dod´an´ı produktu z´akazn´ıkovi. Star´a se o fakturaci a placen´ı. 5. Reklamace – ˇca´st ˇretˇezce, kter´a zajiˇst’uje pˇr´ıjem nespr´avn´eho zboˇz´ı od z´akazn´ıka a ˇreˇs´ı pot´ıˇze z´akazn´ık˚ u s dod´avkami. Pohled na line´arn´ı vazby ve velmi jednoduch´em dodavatelsk´em ˇretˇezci:
Tok zboˇz´ı smˇeˇruje od dodavatele ke koneˇcn´emu z´akazn´ıkovi. Pˇresnˇe naopak smˇeˇruje tok informac´ı a finanˇcn´ıch prostˇredk˚ u. Ve skuteˇcnosti ale mohou b´ yt vazby v dodavatelsk´em ˇretˇezci mnohem sloˇzitˇejˇs´ı, zvl´aˇstˇe po n´astupu internetu, viz obr´azek 1.
2.2
Warehouse Management System (WMS)
Pojem WMS oznaˇcuje syst´em pro ˇr´ızen´ı sklad˚ u a b´ yv´a kl´ıˇcovou souˇca´st´ı SCM. Tento syst´em umoˇzn ˇuje centralizovanou spr´avu sklad˚ u, vˇcetnˇe ˇr´ızen´ı z´asob, sledov´an´ı a um´ıstˇen´ı zboˇz´ı, a tak´e podporu kaˇzdodenn´ıho provozu skladu. Syst´em WMS nen´ı jen uzavˇrenou soustavou, ale umoˇzn ˇuje komunikovat s okoln´ım svˇetem. WMS se m˚ uˇze pouˇz´ıt jako samostatn´a aplikace nebo b´ yt ned´ılnou souˇca´st´ı vˇetˇs´ıho syst´emu jako je ERP (Enterprise Resource Planning) syst´em. Hlavn´ım d˚ uvodem integrov´an´ı WMS pˇr´ımo do ERP je pˇredevˇs´ım snaha o poskytnut´ı kompletn´ıho ˇreˇsen´ı. Mezi ERP syst´emy, kter´e ˇreˇs´ı skladov´an´ı z´asob, patˇr´ı napˇr. SAP, Microsoft Dynamics AX a Epicor Software.
2 E-logistika
4
Obr´azek 1: Pˇr´ıklad sch´ema dodavatelsk´eho ˇretˇezce na b´azi internetu. [6]
V posledn´ıch letech se velmi rozˇs´ıˇrily spoleˇcnosti poskytuj´ıc´ı logistick´e sluˇzby ve formˇe outsourcingu. Poskytovatel tˇechto sluˇzeb vˇetˇsinou poˇzaduje, aby skladovac´ı syst´em byl flexibiln´ı a umoˇzn ˇoval rychle reagovat na poˇzadovanou zmˇenu ve skladu, a to za velmi kr´atkou dobu. Bˇeˇznˇe se nab´ız´ı napojen´ı na nˇejak´ y typ TMS (Transportation Management System), na r˚ uzn´e finanˇcn´ı aplikace a dalˇs´ı syst´emy klient˚ u, kter´ ymi m˚ uˇzou b´ yt i e-shopy. V praxi m´a vˇetˇsinou kaˇzd´ y klient sv˚ uj specifick´ y informaˇcn´ı syst´em, kter´ y odes´ıl´a a pˇrij´ım´a data v r˚ uzn´ ych form´atech. [7] Pro toto specifick´e vyuˇzit´ı WMS se obˇcas pouˇz´ıv´a oznaˇcen´ı virtu´aln´ı sklad.
2.2.1
Virtu´ aln´ı sklady
Skuteˇcn´e sklady lze v dodavatelsk´em ˇretˇezci nahradit sklady virtu´aln´ımi, viz obr´azek 2. Firmy mohou prostˇrednictv´ım ˇretˇezce dod´avat zboˇz´ı pˇr´ımo od v´ yrobce rovnou k z´akazn´ıkovi bez zbyteˇcn´eho pˇresouv´an´ı mezi r˚ uzn´ ymi sklady. Ostatn´ı u ´ˇcastn´ıci vstupuj´ı do ˇretˇezce pouze virtu´alnˇe. Pomoc´ı informaˇcn´ıch syst´em˚ u si mezi sebou pˇred´avaj´ı jen informace o produktech. Zboˇz´ı z˚ ust´av´a fyzicky uloˇzen´e v jednom skladu a nedoch´az´ı tak k zvyˇsov´an´ı n´aklad˚ u za dopravu mezi dalˇs´ımi sklady. [3]
2 E-logistika
5
Výrobce
Regionální distributor
Lokální distributor
Maloobchod
Zákazník
sklad
sklad
virtuální sklad
sklad
zákazník
IS
IS
IS
IS
PohybZzboží
SCMZpropojená
Obr´azek 2: Sch´ema SCM s vyuˇzit´ım virtu´aln´ıho skladu. [3]
Na virtu´aln´ı sklady se d´a pohl´ıˇzet i jinak. Mohu slouˇzit ke spr´avˇe skladov´ ych z´asob um´ıstˇen´ ych ve fyzick´ ych skladech, kter´e se nach´az´ı na r˚ uzn´ ych m´ıstech. Takov´ y syst´em pak umoˇzn ˇuje majiteli kontrolovat veˇsker´e jeho zboˇz´ı prostˇrednictv´ım jedin´eho syst´emu. Virtu´aln´ı sklad vlastnˇe vytv´aˇr´ı abstraktn´ı prostor pro jednoduˇsˇs´ı spr´avu z´asob ve vˇsech uˇzit´ ych skladech. Jak jiˇz bylo zm´ınˇeno v u ´vodu, uˇsetˇr´ı se tak pˇredevˇs´ım n´aklady na dopravu, jelikoˇz se podle zvolen´ ych poˇzadavk˚ u vyuˇzije takov´ ych sklad˚ u, kter´e jsou k z´akazn´ıkovi bl´ıˇze. Typicky se jedn´a o sklady um´ıstˇen´e v zahraniˇc´ı pro zajiˇstˇen´ı dostupnosti zboˇz´ı v dan´e zemi. N´astroje pro spr´avu virtu´aln´ıch sklad˚ u b´ yvaj´ı klient˚ um nejˇcastˇeji poskytov´any skrze webov´e rozhran´ı a ˇcasto b´ yvaj´ı propojen´e s e-shopy. Pˇr´ıkladem jiˇz existuj´ıc´ıho n´astroje je napˇr. slovensk´a sluˇzba PackService1 .
1
http://www.packservice.sk
3 V´ yvoj webov´ ych aplikac´ı
3
6
V´ yvoj webov´ ych aplikac´ı
Tato kapitola popisuje z´akladn´ı prostˇredky, kter´e se vyuˇz´ıvaj´ı pˇri vytv´aˇren´ı webov´ ych aplikac´ı a kter´e jsou potˇreba pro jejich bˇeh. Za webovou aplikaci se povaˇzuje aplikace, kter´a je poskytov´ana uˇzivatel˚ um prostˇrednictv´ım internetu nebo intranetu a bˇeˇz´ı na webov´em serveru. Uˇzivatel´e ji mohou pouˇz´ıvat prostˇrednictv´ım webov´eho prohl´ıˇzeˇce, kter´ y pln´ı u ´lohu tzv. tenk´eho klienta. Webov´e str´anky, kter´e tenk´ y klient zobrazuje, jsou tvoˇreny zdrojov´ ym k´odem – ten je typicky psan´ y pomoc´ı znaˇckovac´ıho jazyka HTML/XHTML rozˇs´ıˇren´eho pˇr´ıpadnˇe o k´od ve skriptovac´ım jazyce, java applety, RIA (Rich Internet Application), ActiveX apod.
3.1
Programovac´ı jazyky
Pro tvorbu dynamick´ ych webov´ ych syst´em˚ u se vyuˇz´ıvaj´ı programovac´ı jazyky, kter´e jsou prov´adˇeny na stranˇe serveru (server-side) a uˇzivateli je pos´ıl´an aˇz v´ ysledek. Tud´ıˇz si je uˇzivatel nem˚ uˇze zobrazit a teoreticky ani nemus´ı m´ıt moˇznost zjistit si, pomoc´ı jak´ ych technologi´ı je dan´ y web tvoˇren. Na obr´azku 3 je vidˇet procentu´aln´ı zastoupen´ı server-side programovac´ıch jazyk˚ u dle W3Techs k 7. dubnu 2014. PHP ASP.NET Java ColdFusion Perl Ruby Python JavaScript
81.96 17.86 2.76 0.86 0.66 0.56 0.26 0.16
Obr´azek 3: Procento zastoupen´ı server-side programovac´ıch jazyk˚ u. [8]
3.1.1
PHP
Jedn´a se o velmi rozˇs´ıˇren´ y skriptovac´ı programovac´ı jazyk, kter´ y vznikl v roce 1995 a moment´alnˇe se nach´az´ı ve verzi 5.5. Jeho souˇca´st´ı jsou knihovny pro snadn´e pˇripojen´ı k vˇetˇsinˇe nejrozˇs´ıˇrenˇejˇs´ıch datab´azov´ ych syst´em˚ u (typicky MySQL). Pro sv˚ uj bˇeh vyˇzaduje webov´ y server (typicky Apache).
3 V´ yvoj webov´ ych aplikac´ı
7
Pˇri v´ yvoji rozs´ahlejˇs´ıch aplikac´ı se ˇcasto vyuˇz´ıv´a v kombinaci s nˇekter´ ym z framework˚ u (Zend, Nette, . . . ), kter´e jsou bud’ zdarma nebo i placen´e, a kter´e takov´ y v´ yvoj zpˇrehledˇ nuj´ı a urychluj´ı. Z´astupci: i velmi rozs´ahl´e projekty jako Yahoo.com, Facebook.com ˇci Wikipedia. org. V´ yhody: • Multiplatformnost, • rozˇs´ıˇrenost a podpora na hostingov´ ych sluˇzb´ach, • mnoho jiˇz existuj´ıc´ıch produkt˚ u, kter´e jsou distribuov´any zdarma i pro komerˇcn´ı uˇzit´ı, • existence framework˚ u, kter´e ˇreˇs´ı nˇekter´e nev´ yhody (sn´ıˇzen´ı bezpeˇcnostn´ıch rizik, debugov´an´ı), • jednoduchost. Nev´ yhody: • Slab´a typov´a kontrola, • nekonzistentn´ı n´azvy funkc´ı, • v z´akladu chyb´ı debugovac´ı n´astroj, • problematick´a zpˇetn´a kompatibilita pˇri vyd´an´ı nov´ ych verz´ı, • primitivn´ı zpracov´an´ı chyb (ve srovn´an´ı s ostatn´ımi jazyky).
3.1.2
Java
Java b´ yv´a nejˇcastˇeji spojov´ana s v´ yvojem velk´ ych webov´ ych aplikac´ı. V praxi je ale vhodn´a i na menˇs´ı a stˇredn´ı weby, kter´e se mohou pozdˇeji rozˇsiˇrovat. Existuje pro ni mnoho framework˚ u, kter´e za program´atora ˇreˇs´ı ˇcast´e z´akladn´ı konstrukce. Pro v´ yvoj a provoz podnikov´ ych aplikac´ı a informaˇcn´ıch syst´em˚ u slouˇz´ı Java Platform, Enterprise Edition (Java EE). Jej´ı souˇca´st´ı jsou servlety, kter´e zpracov´avaj´ı dotazy a vykon´avaj´ı vnitˇrn´ı logiku, a JavaServer Pages (JSP), kter´e reprezentuj´ı view vrstvu. Jednou z nejpouˇz´ıvanˇejˇs´ıch architektur pro v´ yvoj webov´ ych aplikac´ı pomoc´ı Java EE je Model-View-Controller (MVC). Pˇriˇcemˇz servlet slouˇz´ı jako controller,
3 V´ yvoj webov´ ych aplikac´ı
8
JSP jako view a bˇeˇzn´a tˇr´ıda jako model. Model m˚ uˇze b´ yt implementovan´ y jako tzv. JavaBean a usnadnit tak pˇrenos dat mezi jednotliv´ ymi vrstvami (coˇz vyˇzaduje dodrˇzovat zaveden´e konvence pro JavaBean). Pro sv˚ uj bˇeh vyˇzaduje tzv. servletov´ y kontejner, neboli aplikaˇcn´ı server (napˇr. Apache Tomcat). Uk´azka putov´an´ı poˇzadavku od klienta do servletu, vˇc. n´asledn´e odpovˇedi v podobˇe HTML str´anky, je naznaˇcen na obr´azku 4. Z´astupci: napˇr. eBay.com, Amazon.com nebo soci´aln´ı s´ıt’ LinkedIn.com. V´ yhody: • Menˇs´ı n´achylnost na chyby d´ıky statick´e typov´e kontrole (na rozd´ıl od PHP), • rozdˇelen´ı do v´ıce vrstev usnadˇ nuje testov´an´ı, • velk´e mnoˇzstv´ı r˚ uzn´ ych rozˇs´ıˇren´ı a framework˚ u, • ˇsk´alovatelnost. Nev´ yhody: • Nepˇr´ıliˇs rozˇs´ıˇren´ y hosting, • projekt potˇrebuje upravit pro pouˇzit´ı v jin´em servletov´em kontejneru.
Obr´azek 4: Uk´azka zpracov´an´ı GET poˇzadavku pomoc´ı servletu.
3.1.3
ASP.NET
N´astupce scriptovac´ı platformy Active Server Pages (ASP) pro vytv´aˇren´ı dynamick´ ych webov´ ych str´anek zaloˇzen´ y na .NET Frameworku. Stejnˇe jako Java b´ yv´a tato technologie spojov´ana s v´ yvojem velk´ ych webov´ ych aplikac´ı. ASP.NET vyuˇz´ıvaj´ı tzv. WebForms, kde je jako z´aklad br´an webov´ y formul´aˇr (str´anka). Kaˇzd´a str´anka m˚ uˇze m´ıt code-behind, kter´ y slouˇz´ı pro oddˇelen´ı k´odu
3 V´ yvoj webov´ ych aplikac´ı
9
a designu str´anek. Pˇri v´ yvoji se daj´ı pouˇz´ıvat webov´e kontrolky (z´akladn´ı nebo i vlastn´ı), velmi podobn´e jako pro desktopov´e aplikace. Jelikoˇz je HTTP protokol bezstavov´ y, tak si formul´aˇr i vˇsechny kontrolky drˇz´ı informaci o sv´em stavu pomoc´ı ViewState. Informace o stavu se pos´ıl´a klientovi v HTML str´ance zak´odovan´a ve form´atu Base64 – d´ıky ˇcemuˇz dojde ve vˇetˇsinˇe pˇr´ıpadech k znaˇcn´emu n´ar˚ ustu velikosti takov´e str´anky, proˇceˇz je ViewState povaˇzov´ana za jednu z nejkontroverznˇejˇs´ıch funkc´ı ASP.NET [9]. V´ yhodou tohoto ˇreˇsen´ı je ale redukce z´atˇeˇze datab´aze i serveru. V´ yhody: • Moˇznost pouˇz´ıt libovoln´ y jazyk, kter´ y m´a podporu .NET, • menˇs´ı n´achylnost na chyby d´ıky statick´e typov´e kontrole (na rozd´ıl od PHP), • rozdˇelen´ı do v´ıce vrstev usnadˇ nuje testov´an´ı, • velk´e mnoˇzstv´ı r˚ uzn´ ych rozˇs´ıˇren´ı a framework˚ u, • ˇsk´alovatelnost. Nev´ yhody: • Cena pˇri extern´ım hostov´an´ı, • kontroverzn´ı ViewState. Z´astupci: napˇr. Bing.com nebo napˇr. Nbcnews.com. 3.1.4
ASP.NET MVC
Webov´ y aplikaˇcn´ı framework zaloˇzen´ y na ASP.NET, kter´ y je z´aroveˇ n jeho alternativou. Poskytuje jin´ y pˇr´ıstup k tvorbˇe webov´ ych projekt˚ u – na rozd´ıl od ASP.NET, kter´ y se snaˇz´ı pˇribl´ıˇzit programov´an´ı webu desktopov´ ym v´ yvoj´aˇr˚ um, je ASP.NET MVC navrˇzen´ y pˇr´ımo pro webov´e v´ yvoj´aˇre. [10] V´ yhody: ´ a kontrola nad vygenerovan´ • Upln´ ym HTML (narozd´ıl od ASP.NET), • ,,hezk´a url“ v z´akladu (SEO a REST optimalizace), • velk´a nab´ıdka alternativn´ıch view engin˚ u (NVelocity, Brail, NHaml, . . . ),
3 V´ yvoj webov´ ych aplikac´ı
10
• navrˇzeno od z´akladu pro web a webov´e v´ yvoj´aˇre (narozd´ıl od ASP.NET). Nev´ yhody: • Velmi problematick´a integrace do jiˇz existuj´ıc´ıho ASP.NET projektu. Z´astupci: napˇr. Stackoverflow.com, CodePlex.com ˇci Dell.com. 3.1.5
Ostatn´ı
Pro tvorbu webov´ ych syst´em˚ u existuje cel´a ˇrada dalˇs´ıch aplikaˇcn´ıch framework˚ u, kter´e se ve vˇetˇsinˇe pˇr´ıpad˚ u v´ıce ˇci m´enˇe drˇz´ı architektury MVC, jako je Django, Ruby on Rails, Catalyst a dalˇs´ı.
3.2
Datab´ aze
Tvorba dynamick´ ych webov´ ych str´anek se neobejde, aˇz na drobn´e v´ yjimky, bez vyuˇzit´ı nˇekter´e z datab´az´ı – data je potˇreba nˇekam ukl´adat. Datab´az´ı je myˇslen syst´em ˇr´ızen´ı b´aze dat (Database Management System – DBMS) i samotn´a b´aze dat.
Obr´azek 5: Zastoupen´ı DBMS v roce 2008 dle spoleˇcnosti Gartner, Inc. [11] Existuje spousta typ˚ u datab´az´ı, pˇriˇcemˇz nejpouˇz´ıvanˇejˇs´ı a nejzn´amˇejˇs´ı jsou relaˇcn´ı datab´aze (Relational database management system – RDBMS). Na obr´az-
3 V´ yvoj webov´ ych aplikac´ı
11
ku 5 jsou uvedeny ty nepouˇz´ıvanˇejˇs´ı v roce 2008 podle spoleˇcnosti Gartner, Inc. Vˇetˇsina RDBMS umoˇzn ˇuje stejnou z´akladn´ı funkcionalitu.
3.2.1
Oracle Database
L´ıdr na poli RDBMS – d´ıky vysok´emu v´ ykonu, pokroˇcil´ ym moˇznostem zpracov´an´ı dat a snadn´e ˇsk´alovatelnosti. Je k dispozici ve tˇrech z´akladn´ıch verz´ıch, pˇriˇcemˇz verze Express je k dispozici zdarma. Omezen´ı spoˇc´ıv´a v restrikci pouˇzit´ ych prostˇredk˚ u na 11 GB m´ısta pro uˇzivatelsk´a data, 1 CPU a 1 GB RAM. Shrnut´ı je vidˇet v tabulce 1. Pro spr´avu datab´aze slouˇz´ı n´astroj Oracle SQL Developer. Vlastn´ık
Oracle Corporation
Edice
Express, Standard, Enterprise
Operaˇcn´ı syst´em
Multiplatformn´ı
Zprostˇredkov´an´ı pˇr´ıstupu
ODP.NET, OCI, JDBC, ODBC
Dotazovac´ı jazyk
PL/SQL
Tabulka 1: Z´akladn´ı shrnut´ı poznatk˚ u o Oracle Database.
3.2.2
Microsoft SQL Server
V posledn´ıch letech rychle se rozv´ıjej´ıc´ı RDBMS, kter´ y se snaˇz´ı prosadit na vˇsech u ´rovn´ıch, od mal´ ych a stˇredn´ıch podnik˚ u aˇz po nejvˇetˇs´ı korporace. Nab´ız´ı se v pˇeti edic´ıch urˇcen´ ych pro produkci. Express verze je poskytov´ana zdarma a obsahuje obdobn´a omezen´ı jako Oracle Database Express. Shrnut´ı viz tabulka 2. Pro spravov´an´ı se vyuˇz´ıv´a SQL Server Management Studio. Vlastn´ık
Microsoft Corporation
Edice
Express, Web, Business Intelligence, Standard, Enterprise
Operaˇcn´ı syst´em
Windows
Zprostˇredkov´an´ı pˇr´ıstupu
OLE DB, TDS, ADO.NET, JDBC, ODBC
Dotazovac´ı jazyk
T-SQL
Tabulka 2: Z´akladn´ı shrnut´ı poznatk˚ u o Microsoft SQL Server 2014.
3 V´ yvoj webov´ ych aplikac´ı
3.2.3
12
MySQL
Velmi popul´arn´ı RDBMS, kter´ y nyn´ı vlastn´ı spoleˇcnost Oracle Corporation a vyd´av´a ho pod dvˇema licencemi – bezplatnou a komerˇcn´ı, ve kter´e jsou nab´ızena r˚ uzn´a rozˇs´ıˇren´ı a v´ıce n´astroj˚ u. Vzhledem k ˇcast´emu uˇz´ıv´an´ı v kombinaci s operaˇcn´ım syst´emem Linux, webov´ ym serverem Apache a jazykem PHP se ujala zkratka LAMP (Linux, Apache, MySQL, PHP). V tabulce 3 jsou shrnuty z´akladn´ı parametry MySQL. Pro spr´avu MySQL existuje nespoˇcet r˚ uzn´ ych n´astroj˚ u, mezi nejpopul´arnˇejˇs´ı spr´avce patˇr´ı webov´ y phpMyAdmin nebo desktopov´ y MySQL Workbench. Vlastn´ık
Oracle Corporation
Edice
GPL, komerˇcn´ı
Operaˇcn´ı syst´em
Multiplatformn´ı
Zprostˇredkov´an´ı pˇr´ıstupu
ADO.NET, JDBC, ODBC
Dotazovac´ı jazyk
SQL
Tabulka 3: Z´akladn´ı shrnut´ı poznatk˚ u o MySQL.
3.2.4
Ostatn´ı
V praxi je d´ale moˇzn´e setkat se s dalˇs´ımi RDBMS, jako jsou napˇr. Firebird ˇci PostgreSQL. Kromˇe relaˇcn´ıch DBMS existuj´ı i dalˇs´ı ˇreˇsen´ı, jako jsou NoSQL datab´aze. Ty se dˇel´ı podle zp˚ usobu, jak´ ym pˇristupuj´ı k ukl´ad´an´ı dat. Mezi nejpouˇz´ıvanˇejˇs´ı patˇr´ı dokumentov´e datab´aze, jejichˇz z´astupcem je v souˇcasn´e dobˇe velmi popul´arn´ı MongoDb. Dokumentov´e datab´aze slouˇz´ı hlavnˇe pro ukl´ad´an´ı semistrukturovan´ ych dokument˚ u – umoˇzn ˇuj´ı mˇenit strukturu dat za bˇehu. Jejich hlavn´ı v´ yhodou je horizont´aln´ı ˇsk´alovatelnost. Mezi dalˇs´ı NoSQL datab´aze, kter´e se hojnˇe vyuˇz´ıvaj´ı, patˇr´ı datab´aze typu key-value, kter´e disponuj´ı primitivn´ı strukturou pro ukl´ad´an´ı. Mezi nejpouˇz´ıvanˇejˇs´ı key-value datab´aze se ˇrad´ı syst´em Redis. Pˇr´ıkladem jejich uˇzit´ı jsou pˇrev´aˇznˇe soci´aln´ı s´ıtˇe, kde se ukl´ad´a velk´e mnoˇzstv´ı jednoduch´ ych dat. V´ yhodou je vysok´a rychlost pˇri pˇr´ıstupu ke konkr´etn´ım z´aznam˚ um v obrovsk´emu objemu dat. [12]
4 Anal´ yza poˇzadavk˚ u
4
13
Anal´ yza poˇ zadavk˚ u
4.1
Moˇ znosti a omezen´ı u zamˇ estnavatele
Technick´e z´aleˇzitosti byly ˇreˇseny u zamˇestnavatele, kter´ y tuto zak´azku zprostˇredkoval a zaˇstit’oval. Zamˇestnavatelem je spoleˇcnost EuroSoftworks s.r.o.2 , kter´a poskytuje sluˇzby v oblasti IT pro z´akazn´ıky v Evropˇe a USA. Zab´ yv´a se v´ yvojem softwarov´ ych aplikac´ı pomoc´ı modern´ıch technologi´ı zamˇeˇren´ ych pro r˚ uzn´e obory podnik´an´ı. • Omezen´ı: – T´emˇeˇr exkluzivn´ı vyuˇz´ıv´an´ı technologi´ı spoleˇcnosti Microsoft. – Pˇrechod ve v´ yvojov´em oddˇelen´ı od ASP.NET k ASP.NET MVC.
4.2
Moˇ znosti a omezen´ı u z´ akazn´ıka
Z´akazn´ıkem je stroj´ırensk´a firma Hobes s.r.o.3 , kter´a se zab´ yv´a tvorbou z´amk˚ u, autod´ıl˚ u a dalˇs´ıch n´astroj˚ u. V souˇcasn´e dobˇe zamˇestn´av´a pˇres 187 zamˇestnanc˚ u a roˇcnˇe m´a obrat pˇres 200 mil. Kˇc. V r´amci firmy se vyuˇz´ıv´a nˇekolik informaˇcn´ıch syst´em˚ u, jak pro ekonomick´e oddˇelen´ı – SQL Ekonom4 , tak pro ˇr´ızen´ı firemn´ıch zdroj˚ u – Microsoft Dynamics AX5 , aj. Spoleˇcnost disponuje tˇremi servery, kter´e vyuˇz´ıv´a pro vnitropodnikov´e u ´ˇcely. Vˇsechny poˇc´ıtaˇce bˇeˇz´ı na operaˇcn´ım syst´emu Windows. • Omezen´ı: – Nevhodn´e internetov´e pˇripojen´ı pro vlastn´ı hostov´an´ı v´ ysledn´eho produktu. – Operaˇcn´ı syst´em Windows Server 2012.
4.3
Sbˇ er poˇ zadavk˚ u
Sbˇer poˇzadavk˚ u probˇehl formou ˇsesti sch˚ uzek, kter´e se konaly po t´ ydnu. Bˇehem tˇechto sch˚ uzek doˇslo k sezn´amen´ı se s danou problematikou a vydefinov´an´ı z´akladn´ı funkcionality a vzhledu poˇzadovan´eho syst´emu. 2
Jak jiˇz bylo naznaˇceno v u ´vodu, jedn´ım z c´ıl˚ u vˇetˇsiny firem je snaha se rozˇs´ıˇrit a zvyˇsovat svoj´ı m´ıru p˚ usobnosti jak na tuzemsk´em, tak na zahraniˇcn´ım trhu. Firmy si vˇsak kv˚ uli n´aklad˚ um udrˇzuj´ı pouze jeden centr´aln´ı sklad. Poˇr´ızen´ı dalˇs´ıch sklad˚ u ve vybran´ ych st´atech se pro menˇs´ı podniky jev´ı jako ekonomicky nev´ yhodn´e. Hlavn´ım probl´emem tak z˚ ust´av´a pˇreprava zboˇz´ı z centr´aln´ıho skladu k z´akazn´ıkovi, kter´a je pˇri pos´ıl´an´ı do zahraniˇc´ı v´ yraznˇe n´akladnˇejˇs´ı. ˇ sen´ım je vyuˇzit´ı outsourcingu a n´astroje, kter´ Reˇ y umoˇzn´ı zajistit komunikaci mezi v´ yrobcem a poskytovatelem outsourcovan´eho skladu. Poˇzadavky na takov´ y syst´em jsou n´asleduj´ıc´ı: • Prostˇred´ı pˇrep´ınateln´e do r˚ uzn´ ych jazyk˚ u, • moˇznost pˇrekl´ad´an´ı u ´daj˚ u o produktu dle dan´e zemˇe, • z´akladn´ı pr´ace se zboˇz´ım – naskladˇ nov´an´ı a vyskladˇ nov´an´ı, • z´akladn´ı reporty o pohybu zboˇz´ı, • odpov´ıdaj´ıc´ı zabezpeˇcen´ı.
4.3.2
Typy uˇ zivatel˚ u
Spr´ avce M˚ uˇze b´ yt pouze jeden, jedn´a se o administr´atora syst´emu. Spravuje uˇzivatele, zav´ad´ı nov´e sklady a jako jedin´ y m´a moˇznost editovat vˇsechny u ´daje.
Vrchn´ı skladn´ık Kaˇzd´ y sklad m´a jednoho vrchn´ıho skladn´ıka, kter´ y je zodpovˇedn´ y za bˇeh dan´eho skladu. Vrchn´ı skladn´ık m˚ uˇze vytv´aˇret u ´ˇcty pro bˇeˇzn´e skladn´ıky.
Skladn´ık Kaˇzd´ y sklad m´a sv´e skladn´ıky, kteˇr´ı se staraj´ı o pˇr´ıjem a expedici zboˇz´ı. Skladn´ık m´a pˇr´ıstup pouze k informac´ım, kter´e jsou pro nˇej nezbytn´e. Nevid´ı ceny jednotliv´ ych poloˇzek, pouze cel´e z´asilky (z d˚ uvodu pojiˇstˇen´ı z´asilky). Jeho prim´arn´ı u ´lohou je pr´ace se zboˇz´ım, jeho pˇr´ıjem a expedice.
4 Anal´ yza poˇzadavk˚ u
15
Vlastn´ık zboˇ z´ı Jedn´a se o pr´avoplatn´eho majitele skladovan´eho zboˇz´ı, kter´ y pro skladov´an´ı vyuˇz´ıv´a nˇekter´ y ze sklad˚ u. Na obr´azku 6 m˚ uˇzete vidˇet z´akladn´ı strukturu syst´emu z pohledu vlastn´ıka zboˇz´ı. Vlastn´ık zboˇz´ı m˚ uˇze vytv´aˇret dalˇs´ı uˇzivatele (napˇr. sv´e zamˇestnance), kteˇr´ı budou m´ıt stejn´a pr´ava pro pr´aci se zboˇz´ım, jako on.
VirtuálníZsklady Sklad1
Koncepty dodacích listů Koncepty objednávek
Skladníci
Reporty
Sklad2
Zákazníci
Zákazníci
Produkty
Produkty
Objednávky DodácíZlisty
Skladníci
Nastavení
...
Objednávky DodácíZlisty
VýčetZvšechZproduktů
Obr´azek 6: Syst´em z pohledu konkr´etn´ıho vlastn´ıka zboˇz´ı.
4.3.3
Dokument specifikace poˇ zadavk˚ u
Na z´akladˇe sch˚ uzek a konzultac´ı byl vytvoˇren dokument specifikace poˇzadavk˚ u, kter´ y uv´ad´ı vˇse, co se od v´ ysledn´e aplikace oˇcek´av´a. Dokument je souˇca´st´ı pˇr´ıloh um´ıstˇen´ ych na CD, viz pˇr´ıloha D.
4.4 4.4.1
Kl´ıˇ cov´ e poˇ zadavky Z´ akladn´ı funkce
• Pˇ r´ıjem zboˇ z´ı na sklad – Zajiˇst’uje se pomoc´ı dodac´ıch list˚ u, kter´e vytv´aˇr´ı pˇr´ımo v syst´emu vlastn´ık zboˇz´ı. Zboˇz´ı je evidov´ano pro potvrzen´ı pˇrebr´an´ı skladn´ıkem. Pˇr´ıpadnˇe m˚ uˇze skladn´ık zapsat reklamaci. • Expedice zboˇ z´ı k z´ akazn´ıkovi – Zajiˇst’uje se pomoc´ı objedn´avek, kter´e vytv´aˇr´ı pˇr´ımo v syst´emu vlastn´ık zboˇz´ı. Je nutn´e specifikovat zp˚ usob dopravy a dodac´ı podm´ınky (r˚ uzn´e ceny). Skladn´ık si objedn´avku rezervuje,
4 Anal´ yza poˇzadavk˚ u
16
aby na jedn´e objedn´avce nedˇelalo v´ıce skladn´ık˚ u, zabal´ı a uvede do syst´emu poˇcet bal´ık˚ u pˇripraven´ ych k expedici. Po proveden´ı expedice a pˇrijet´ı penˇez oznaˇc´ı vlastn´ık zboˇz´ı objedn´avku za uzavˇrenou.
4.4.2
Poˇ zadavky na zabezpeˇ cen´ı
Jelikoˇz se jedn´a o velmi citliv´a data – pˇri jejich kompromitov´an´ı m˚ uˇze doj´ıt k znaˇcn´ ym finanˇcn´ım ztr´at´am, je kladen velk´ y d˚ uraz na zabezpeˇcen´ı aplikace a jejich dat. Konkr´etn´ı poˇzadavky na zabezpeˇcen´ı: • Dodrˇzov´an´ı zvolen´ ych bezpeˇcnostn´ıch konvenc´ı (Owasp6 ), • logov´an´ı veˇsker´ ych akc´ı uˇzivatel˚ u, zvl´aˇstˇe pˇri pohybu zboˇz´ı, • pravideln´a z´aloha datab´aze.
4.5
Moˇ znosti nasazen´ı
Existuje v´ıce moˇznost´ı pro nasazen´ı poˇzadovan´eho syst´emu, n´ıˇze je jejich porovn´an´ı podle aspekt˚ u jako je jejich variabilita, potenci´al dan´e platformy a n´aklady na poˇr´ızen´ı. V´ ybˇer je omezen na technologie spoleˇcnosti Microsoft, vzhledem k poˇzadavku na vyuˇzit´ı tˇechto technologi´ı. Cena se poˇc´ıt´a pro minim´aln´ı doporuˇcovanou sestavu urˇcenou k produkˇcn´ımu bˇehu, kter´a je uvedena ve specifikaci poˇzadavk˚ u, vˇcetnˇe n´aklad˚ u za pˇr´ıpadn´e licence. Do ceny se nezapoˇc´ıt´avaj´ı n´aklady na provoz dom´eny. Porovn´an´ı je aktu´aln´ı pro prvn´ı kvart´al roku 2014. Vych´azelo se pˇrev´aˇznˇe z nab´ıdky tuzemsk´eho trhu, zvolen´e pˇr´ıklady jsou pouze orientaˇcn´ı.
4.5.1
Vlastn´ı
Vyuˇzit´ı vlastn´ıho serveru pro produkˇcn´ı nasazen´ı pˇr´ımo u z´akazn´ıka nen´ı vhodnou volbou, hlavnˇe kv˚ uli omezen´ım od poskytovatele internetov´eho pˇripojen´ı. Vyuˇz´ıvan´e servery slouˇz´ı pouze pro intern´ı pouˇz´ıv´an´ı, pˇr´ıpadnˇe pro obˇcasn´ y vzd´alen´ y pˇr´ıstup. Z´akazn´ık nav´ıc neprojevil o tuto moˇznost z´ajem. 6
Jedn´a se o pron´ajem m´ısta na serveru spoleˇcnˇe s dalˇs´ımi sluˇzbami potˇrebn´ ymi pro provoz webov´ ych str´anek. Z´akazn´ık nem´a nad instalovan´ ym programov´ ym vybaven´ım t´emˇeˇr ˇz´adnou kontrolu. V tabulce 4 je uk´azka nab´ıdky na ˇcesk´em trhu. Spoleˇ cnost
V pˇr´ıpadˇe VPS z´ısk´av´a z´akazn´ık na rozd´ıl od webhostingu plnou kontrolu nad sv´ ym serverem a m˚ uˇze si ho tak pˇrizp˚ usobit sv´ ym potˇreb´am. VPS bˇeˇz´ı na stejn´em fyzick´em stroji jako virtu´aln´ı server ostatn´ıch z´akazn´ık˚ u. V´ yhodou tohoto ˇreˇsen´ı je snadn´a moˇznost rozˇs´ıˇren´ı HW. Tabulka 5 ukazuje nab´ıdku VPS. Do uveden´ ych cen jsou zapoˇc´ıt´any i pˇr´ıpadn´e dalˇs´ı potˇrebn´e licence pro provoz poˇzadovan´ ych Microsoft technologi´ı. Spoleˇ cnost
Na rozd´ıl od VPS nab´ız´ı volba dedikovan´eho serveru pron´ajem fyzick´eho HW a t´ım p´adem garantovan´ y v´ ykon. V´ yhodou tohoto ˇreˇsen´ı je i technick´a podpora, za server
4 Anal´ yza poˇzadavk˚ u
18
zodpov´ıd´a provozovatel. V tabulce 6 jsou porovn´av´any ceny, do kter´ ych jsou opˇet zapoˇc´ıt´any i vˇsechny potˇrebn´e licence. Pˇ ribliˇ zn´ a cena (vˇ cetnˇ e DPH)
Tato sluˇzba se obˇcas naz´ yv´a i serverhosting. V tomto pˇr´ıpadˇe je nutn´e investovat do vlastn´ıho HW, kter´ y se pot´e um´ıst´ı do pˇr´ısluˇsn´eho datacentra. Pronaj´ım´a se tedy pouze prostor, konektivita a energie. Pˇr´ıpadn´e hav´arie mus´ı ˇreˇsit z´akazn´ık s´am. V tabulce 7 je vidˇet srovn´an´ı cen pron´ajmu, nezapoˇc´ıt´av´a se cena vlastn´ıho stroje, kter´a se u minim´aln´ıch konfigurac´ı pohybuje kolem 30 000,- Kˇc vˇcetnˇe DPH a hrad´ı se jednor´azovˇe. Pˇ ribliˇ zn´ a cena (vˇ cetnˇ e DPH)
V pˇr´ıpadˇe cloudu je situace trochu jin´a, neˇz u pˇredchoz´ıch moˇznost´ı. V potaz se tentokr´at nebere tuzemsk´a nab´ıdka, ale pˇr´ımo vyuˇzit´ı platformy Microsoft Azure, kter´a je poskytov´ana celosvˇetovˇe. Jedn´a se o sluˇzbu umoˇzn ˇuj´ıc´ı rychle vytv´aˇret, nasazovat, ˇsk´alovat a spravovat aplikace v r´amci glob´aln´ı s´ıtˇe datacenter spoleˇcnosti Microsoft, od ˇcehoˇz se odv´ıj´ı cena. Plat´ı se za vyuˇz´ıv´an´ı IT zdroj˚ u, ne za jejich
4 Anal´ yza poˇzadavk˚ u
19
vlastnˇen´ı, tˇeˇzko se tedy dopˇredu odhaduj´ı n´aklady. Ty porostou s t´ım, jak se bude v´ ysledn´ y produkt, kter´ y na Azure pobˇeˇz´ı, vyuˇz´ıvat7 . Jelikoˇz se jedn´a o pomˇernˇe novou technologii, nen´ı tolik rozˇs´ıˇrena, coˇz m˚ uˇze b´ yt probl´em pro jej´ı dlouhodobˇejˇs´ı spr´avu. Dalˇs´ım omezen´ım je pˇresn´e definov´an´ı sluˇzeb, kter´e m˚ uˇze z´akazn´ık vyuˇz´ıvat a omezen´ı jejich konfigurace.
4.5.7
Vyhodnocen´ı
Po sezn´amen´ı se s jednotliv´ ymi moˇznostmi nasazen´ı byla vytvoˇrena tabulka 8, kter´a jednotliv´e moˇznosti porovn´av´a podle toho, jak splˇ nuj´ı ˇci nesplˇ nuj´ı n´asleduj´ıc´ı tˇri krit´eria: 1. N´ aklady – vych´az´ı z v´ yˇse uveden´ ych pˇribliˇzn´ ych n´aklad˚ u na poˇr´ızen´ı a bˇeh. Do ceny se nezapoˇc´ıt´av´a vlastn´ı administrace. 2. Variabilita – rozum´ı se volnost administr´atora nakl´adat s dan´ ym syst´emem (instalace dodateˇcn´ ych aplikac´ı, vlastn´ı spr´ava softwaru, atd.). ˇ alovatelnost – moˇznost rozˇs´ıˇren´ı HW konfigurace a nav´ 3. Sk´ yˇsen´ı tak celkov´eho v´ ykonu. V tabulce 8 jsou zelenou barvou oznaˇceny sluˇzby, kter´e dan´e krit´erium zcela pln´ı, ˇzlutˇe ty, kter´e ho pln´ı pouze ˇc´asteˇcnˇe a ˇcervenˇe, kter´e ho nepln´ı. n´ aklady
variabilita
ˇ sk´ alovatelnost
Webhosting VPS Dedikovan´ y server Housing Cloud Tabulka 8: Srovn´an´ı jednotliv´ ych moˇznost´ı nasazen´ı. Podle z´ıskan´ ych poznatk˚ u nejl´epe vych´az´ı vyuˇzit´ı sluˇzeb VPS nebo Cloud pro produkˇcn´ı prostˇred´ı. V´ ysledky byly prezentov´any z´akazn´ıkovi, kter´ y je vzal na vˇedom´ı.
7
V´ ypoˇcet orientaˇcn´ı ceny je moˇzn´e prov´est na http://azure.microsoft.com/en-us/ pricing/calculator.
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
5
20
Anal´ yza ˇ reˇ sen´ı s vyuˇ zit´ım platformy ASP.NET MVC
Pro v´ yvoj byla zvolena technologie ASP.NET MVC 4, kter´a implementuje n´avrhov´ y vzor MVC a rozdˇeluje tak projekt do tˇr´ı z´akladn´ıch ˇca´st´ı. N´asleduj´ıc´ı kapitola analyzuje poˇzadavky zadavatele a navrhuje jejich ˇreˇsen´ı s uˇzit´ım zvolen´e technologie. Na obr´azku 7 je n´azornˇe zn´azornˇena komunikace mezi jednotliv´ ymi ˇc´astmi.
Obr´azek 7: N´avrhov´ y vzor MVC. Jelikoˇz bylo zvoleno ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC, vymezuj´ı se moˇzn´e pouˇzit´e programovac´ı jazyky na C# a Visual Basic .NET. V´ yvojov´a prostˇred´ı se omezuj´ı na Microsoft Visual Studio, SharpDevelop ˇci MonoDevelop pˇr´ıpadnˇe i dalˇs´ı, kter´a ale nejsou obecnˇe pˇr´ıliˇs zaveden´a, pˇriˇcemˇz nativn´ı podpora ASP.NET MVC verze 4 je pˇr´ıtomna pouze v Microsoft Visual Studiu.
5.1
Datov´ a vrstva
Datov´a vrstva se star´a o pˇr´ıstup k dat˚ um, kter´a se nach´azej´ı v datov´em u ´loˇziˇsti, typicky relaˇcn´ı datab´azi nebo souborov´em syst´emu. V n´avrhov´em vzoru MVC se pr´ace na t´eto u ´rovni ˇreˇs´ı na u ´rovn´ı Modelu, jehoˇz jedin´ ym u ´kolem je definovat strukturu dat (pomoc´ı datov´ ych kontejner˚ u) a tato data si z´ıskat z datov´eho u ´loˇziˇstˇe. Vrstva se ˇza´dn´ ym zp˚ usobem nestar´a o business logiku. Jako datov´e u ´loˇziˇstˇe m˚ uˇze poslouˇzit libovoln´a relaˇcn´ı datab´aze zm´ınˇen´a v sekci 3.2. Vzhledem k vyuˇzit´ı v´ yvojov´ ych n´astroj˚ u Microsoftu se nab´ız´ı vyuˇzit´ı datab´aze
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
21
SQL Server, kter´a je pro spolupr´aci s dan´ ymi n´astroji optimalizov´ana. At’ uˇz jde o nativn´ı podporu objektovˇe relaˇcn´ıho mapov´an´ı (ORM), tak pokroˇcil´e spravov´an´ı rovnou v r´amci Visual Studia. Rozd´ıly mezi jednotliv´ ymi verzemi: • SQL Server Express – Zdarma i pro komerˇcn´ı pouˇzit´ı. – Omezen´ı 10 GB na datab´azi. – Pouze jeden fyzick´ y procesor (ale libovolnˇe jader). • SQL Server Standard – Nen´ı zdarma. – Bez v´ yrazn´ ych omezen´ı. – Umoˇzn ˇuje nav´ıc analytick´e, integraˇcn´ı a notifikaˇcn´ı sluˇzby. V pˇr´ıpadˇe vyuˇzit´ı ORM se d´a k vytvoˇren´ı datab´aze pˇristoupit jednou ze tˇr´ı metod: Database First Jak jiˇz n´azev napov´ıd´a, datab´aze vznik´a zcela samostatnˇe. Po jej´ım vytvoˇren´ı je podle jej´ıho sch´ematu reverznˇe vytvoˇren odpov´ıdaj´ıc´ı model. V pˇr´ıpadˇe zmˇeny sch´ematu datab´aze je nutn´e model bud’to ruˇcnˇe upravit nebo ho pˇregenerovat. Code First V tomto pˇr´ıpadˇe jsou nejprve vytvoˇreny modelov´e tˇr´ıdy, kter´e reprezentuj´ı jednotliv´e entity a vazby mezi nimi. Dodateˇcn´e informace (prim´arn´ı kl´ıˇc, maxim´aln´ı d´elka, apod.) se urˇcuj´ı pomoc´ı pˇr´ısluˇsn´eho atributu, viz v´ ypis 1. Datab´aze je n´aslednˇe vytvoˇrena podle tˇechto modelov´ ych tˇr´ıd. V pˇr´ıpadˇe zmˇeny struktury bˇehem v´ yvoje je moˇzn´e vyuˇz´ıt tzv. migrac´ı, kde se tyto zmˇeny nadefinuj´ı a datab´azi je moˇzn´e za bˇehu upravit. Model First V tomto pˇr´ıpadˇe je nejprve vytvoˇren relaˇcn´ı model, z kter´eho se vygeneruj´ı jak modelov´e tˇr´ıdy, tak SQL skript, kter´ y generuje datab´azi. V pˇr´ıpadˇe zmˇen je nutn´e bud’ celou datab´azi pˇregenerovat podle nov´eho SQL skriptu nebo ruˇcnˇe vytv´aˇret tzv. change scripty, kter´e datab´azi n´aleˇzitˇe uprav´ı.
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
22
public class Uzivatel { [Key] public string Prezdivka { get; set; } public string CeleJmeno { get; set; } // virtu´ aln´ ı vazba 1:N (1 uˇ zivatel m˚ uˇ ze m´ ıt N pˇ r´ ıspˇ evk˚ u) public DbSet Prispevky { get; set; } }
V´ ypis 1: Uk´azka tˇr´ıdy modelu.
5.1.1
Objektovˇ e relaˇ cn´ı mapov´ an´ı
Pro ORM je moˇzn´e v .NET vyuˇz´ıt dvou framework˚ u, kter´e nab´ızej´ı velmi podobnou funkcionalitu – NHibernate a Entity Framework. Mezi hlavn´ı rozd´ıly by se dala zaˇradit pomˇernˇe neaktu´aln´ı a necentralizovan´a dokumentace NHibernate oproti pˇrehlednˇe udrˇzovan´e dokumentaci Entity Frameworku.8
5.1.2
Pˇ r´ıstup k dat˚ um
Pro zajiˇstˇen´ı komplexn´ıho pˇr´ıstupu k dat˚ um slouˇz´ı v .NET Frameworku objektov´ y model ADO.NET. ADO.NET je jiˇz celkem zabˇehl´a knihovna datov´ ych objekt˚ u, kter´a dod´av´a dva jmenn´e prostory datab´azov´eho klienta – jeden je urˇcen pro aplikaci SQL Server a druh´ y pro datab´aze pouˇz´ıvan´e prostˇrednictv´ım rozhran´ı OLE DB. LINQ to SQL je integrovan´ y jazyk pro dotazov´an´ı, kter´ y je souˇc´ast´ı ADO.NET od verze .NET Framework 3.5. Jeho integrace je zn´azornˇena na obr´azku 8. D´ıky tomuto modelu je moˇzn´e m´ıchat SQL pˇr´ıkazy pˇr´ımo s LINQ to SQL k´odem, coˇz usnadˇ nuje pˇr´ıpadnou migraci st´avaj´ıc´ıho ˇreˇsen´ı. Ve v´ ypisu 1 je uk´az´ano, jak se s n´ım pracuje.
1 2 3 4 5
string[] names = { "Jan", "Hanka", "Evˇ zen", "Iva", "Petr" }; var shortNames = from n in names where n.Length < 4 select n orderby c.Length;
V´ ypis 2: Uk´azka pr´ace s LINQ to SQL. 8
Velmi pˇekn´e detailn´ı srovn´ an´ı lze nal´ezt v ˇcl´anku Daria Kucinskase [13].
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
23
T´ımto k´odem je zajiˇstˇeno vytvoˇren´ı promˇenn´e shortNames (kl´ıˇcov´e slovo var ˇr´ık´a kompil´atoru, aby si s´am odvodil typ deklarovan´e promˇenn´e na z´akladˇe kontextu – v tomto pˇr´ıpadˇe se jedn´a o typ IOrderedEnumerable), kter´a se napln´ı vˇsemi jm´eny z pole names, jejichˇz d´elka je kratˇs´ı nebo rovna ˇctyˇrem. Na konci dojte k seˇrazen´ı podle d´elky. D´ale se s tˇemito daty d´a pracovat bˇeˇzn´ ymi zp˚ usoby (napˇr. pouˇzit´ım cyklu foreach). LINQ jako takov´ y je navrˇzen hodnˇe obecnˇe. V´ yhodou je, ˇze stejnou konstrukc´ı se d´a pracovat s r˚ uzn´ ymi daty (napˇr. vyhled´av´an´ı dat v datab´az´ıch, XML souborech ˇci na filesyst´emu m˚ uˇze b´ yt zaps´ano takˇrka stejn´ ym zp˚ usobem). Dalˇs´ı v´ yhodou m˚ uˇze b´ yt objektov´ y pohled na data.
Obr´azek 8: Vztah ADO.NET a LINQ to SQL. [14]
5.1.3
Vyuˇ zit´ı IoC/DI
Vzhledem k poˇzadavk˚ um na pˇr´ıpadnou rozˇs´ıˇritelnost aplikace by bylo vhodn´e vyuˇz´ıt nˇejak´eho z Inversion of Control a Dependency Injection (IoC/DI) frameworku. Mezi nejzn´amˇejˇs´ı patˇr´ı SimpleInjector a Ninject. 5.1.4
Jazykov´ e mutace
Jelikoˇz je v´ ysledn´ y syst´em urˇcen´ y pro r˚ uzn´e trhy v r´amci EU, je potˇreba aby bylo jeho prostˇred´ı pˇrep´ınateln´e do r˚ uzn´ ych jazyk˚ u, ale aby data veden´a u produkt˚ u/zboˇz´ı byla rovnˇeˇz v r˚ uzn´ ych zem´ıch r˚ uzn´a (cena, popis produktu, . . . ). Na z´akladˇe poˇzadavk˚ u od klienta se pˇredpokl´ad´a, ˇze kaˇzd´ y produkt bude obsahovat: • Jazykovˇe z´avisl´a data – N´azev, prodejn´ı cena, popis, r˚ uzn´e soubory (manu´aly). • Jazykovˇe nez´avisl´a data ˇ ıslo produktu, ˇc´arov´ – C´ y k´od, informace o poˇctu kus˚ u v balen´ı, v´aha, ostatn´ı.
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
24
K tomuto probl´emu se d´a pˇristupovat dvˇema z´akladn´ımi zp˚ usoby – ,,jazykovˇe z´avisl´a data“ budou individu´aln´ı pro kaˇzd´ y st´at nebo budou individu´aln´ı pro kaˇzd´ y jazyk. V prvn´ım pˇr´ıpadˇe je nutn´e m´ıt na pamˇeti moˇznou redundanci dat, jelikoˇz mohou vznikat dva pˇreklady t´ehoˇz. V druh´em pˇr´ıpadˇe m˚ uˇze nastat probl´em s prodejn´ı cenou, kterou m˚ uˇze klient vyˇzadovat v r˚ uzn´ ych regionech rozd´ılnou.
5.2
Aplikaˇ cn´ı vrstva
V n´avrhov´em vzoru MVC se tato vrstva ˇreˇs´ı na u ´rovni Controller. Jej´ım u ´kolem je pˇrij´ımat poˇzadavky od uˇzivatele a ˇreˇsit vnitˇrn´ı chov´an´ı aplikace, neboli business logiku. Pracuje jak s daty (model), tak s prezentaˇcn´ı vrstvou (view) a vytv´aˇr´ı mezi nimi spojen´ı.
5.2.1
Workflow
V pˇr´ıpadˇe, ˇze se ˇreˇs´ı nˇejak´a pˇreddefinovan´a komplexnˇejˇs´ı ˇcinnost, kter´a se skl´ad´a z menˇs´ıch operac´ı, star´a se o bˇeh tzv. workflow. Pˇr´ıkladem jednoduch´eho workflow v tomto pˇr´ıpadˇe m˚ uˇze b´ yt napˇr. odesl´an´ı zakoupen´eho zboˇz´ı, kter´e se skl´ad´a z ˇcinnost´ı: • Na stranˇ e vlastn´ıka zboˇ z´ı – v´ ybˇer zboˇz´ı k odesl´an´ı, zvolen´ı z´akazn´ıka, odesl´an´ı poˇzadavku na expedici zboˇz´ı. • Na stranˇ e skladu – pˇrijet´ı poˇzadavku na expedici zboˇz´ı, zabalen´ı, potvrzen´ı expedice zboˇz´ı. Workflow lze ˇreˇsit bud’ individu´alnˇe nebo napˇr. s vyuˇzit´ım Windows Workflow Foundation (WF), kter´ y je souˇca´st´ı .NET Frameworku od verze 3. Individu´aln´ı pˇr´ıstup je vhodnˇejˇs´ı v pˇr´ıpadˇe projekt˚ u s menˇs´ım poˇctem komplexn´ıch ˇcinnost´ı.
Obr´azek 9: Workflow ve WF.
Vyuˇzit´ı WF se nab´ız´ı u projekt˚ u s rozs´ahlejˇs´ımi, popsan´ ymi procesy, u kter´ ych doch´az´ı k n´avratu k pˇredchoz´ım stav˚ um a t´ım p´adem k cyklick´ ym operac´ım. WF se implementuje jako samostatn´ y projekt, kter´ y prostˇrednictv´ım
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
25
API zpˇr´ıstupˇ nuje a umoˇzn ˇuje pr´aci s nadefinovan´ ymi workflow, kter´e se definuj´ı v XAML souborech. Pˇr´ıklad obecn´eho workflow ve WF je vidˇet na obr´azku 9. V r´amci tohoto deterministick´eho stavov´eho automatu je moˇzn´e vykon´avat akce jak na pˇrechodech, tak ve stavech samotn´ ych. V´ yhodou WF je jeho variabilita (daj´ı se v nˇem dˇelat velmi sofistikovan´e akce), ˇsk´alovatelnost, nemus´ı se ps´at pˇr´ıliˇs k´odu, d´ıky oddˇelen´ı od zbytku projektu je moˇzn´e pro nˇej vytv´aˇret samostatn´e automatick´e testy. Nev´ yhodou je, ˇze potˇrebuje pro bˇeh vlastn´ı datab´azi, ukl´adan´a data jsou v neˇciteln´e podobˇe (nejde za bˇehu modifikovat) a pˇr´ıliˇs se nepouˇz´ıv´a.
5.2.2
Autentizace
Pro pˇr´ıstup do syst´emu je nutn´e se pˇrihl´asit (autentizovat), ˇza´dn´a ˇc´ast syst´emu kromˇe pˇrihlaˇsovac´ı obrazovky a str´anky s informacemi nem´a b´ yt pˇr´ıstupn´a nepˇrihl´aˇsen´emu uˇzivateli. Dle zvyklost´ı internetov´ ych syst´em˚ u se uˇzivatel m˚ uˇze autentizovat bud’ sv´ ym uˇzivatelsk´ ym jm´enem nebo emailem a heslem. Hesla je vhodn´e z bezpeˇcnostn´ıch d˚ uvod˚ u hashovat pomoc´ı nˇekter´eho z vhodn´ ych algoritm˚ u a ide´alnˇe ho pˇred t´ım i tzv. ,,solit“. Mezi nejpouˇz´ıvanˇejˇs´ı algoritmy pro hashov´an´ı se v dneˇsn´ı dobˇe ˇrad´ı MD5 a SHA1. Tˇem ale b´ yv´a vyt´ yk´ana velk´a rychlost v´ ypoˇctu otisku – d´ıky rychl´emu hardwaru (napˇr. i GPU) lze k prolomen´ı takto uloˇzen´ ych hesel vyuˇz´ıt metodu hrub´e s´ıly. Modern´ı alternativou jsou pomalejˇs´ı hashovac´ı algoritmy jako PBKDF2, SCrypt a BCrypt, kter´e nemaj´ı rychlost v´azanou na v´ ykon HW, na kter´em jsou poˇc´ıt´any. Pˇrihl´aˇsen´ y uˇzivatel se m˚ uˇze ovˇeˇrovat bud’ pomoc´ı autentizaˇcn´ı cookie, kter´a je ˇsifrovan´a, popˇr. pomoc´ı Session. Apar´at pro pˇrihlaˇsov´an´ı je moˇzn´e implementovat vlastn´ı nebo se nab´ız´ı vyuˇzit´ı ASP.NET Membership providera a Role providera.
5.2.3
Autorizace
Kaˇzd´ y z uˇzivatel˚ u syst´emu m´a pˇridˇelenou jednu z definovan´ ych rol´ı v ˇc´asti 4.3.2 – spr´avce, vrchn´ı skladn´ık, skladn´ık a vlastn´ık zboˇz´ı. Kaˇzd´a role vyˇzaduje pˇr´ıstup k jin´e ˇca´sti aplikace s v´ yjimkou vrchn´ıho skladn´ıka, kter´ y m´a pouze drobnˇe rozˇs´ıˇren´e pravomoci ve srovn´an´ı s bˇeˇzn´ ym skladn´ıkem. Nab´ız´ı se tedy rozdˇelen´ı controller˚ u do tˇr´ı z´akladn´ıch ˇca´st´ı podle rol´ı ,,spr´avce“, ,,skladn´ık a vrchn´ı skladn´ık“, ,,vlastn´ık zboˇz´ı“ a jedn´e spoleˇcn´e ˇc´asti, kter´a by ˇreˇsila obecnou pr´aci se vˇsemi uˇzivatelsk´ ymi u ´ˇcty, zpracov´avala chyby atd. Pro kontrolu rol´ı slouˇz´ı v ASP.NET MVC tzv. autorizaˇcn´ı atribut, kter´ y se v´aˇze
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
26
bud’ k cel´emu controlleru nebo konkr´etn´ı akci, pˇriˇcemˇz vˇetˇs´ı prioritu m´a atribut uveden´ y u konkr´etn´ı akce. Pˇr´ıklad autorizaˇcn´ıho atributu, kter´ y kontroluje, zda je uˇzivatel pˇrihl´aˇsen´ y a jeho role je skladn´ık nebo vrchn´ı skladn´ık je vidˇet ve v´ ypisu 3. 1 2 3 4 5
[Authorize(Roles = "Skladnik, Vrchni_skladnik")] public ActionResult MojeAction() { // vykon´ avan´ y k´ od }
V´ ypis 3: Pˇr´ıklad autorizaˇcn´ıho atributu. V pˇr´ıpadˇe zvl´aˇstn´ıch poˇzadavk˚ u na chov´an´ı, napˇr. pˇresmˇerov´an´ı na individu´aln´ı v´ ysledky pˇri nesplnˇen´ı poˇzadovan´ ych pˇredpoklad˚ u, je moˇzn´e vytvoˇrit si vlastn´ı autorizaˇcn´ı atribut, kter´ y bude st´avaj´ıc´ı upravovat nebo rozˇsiˇrovat.
5.2.4
API
Aplikaˇcn´ı rozhran´ı, kter´e bude zpˇr´ıstupˇ novat obsah syst´emu, m˚ uˇze b´ yt ˇreˇseno napˇr. prostˇrednictv´ım REST (Representational State Transfer) nebo SOAP (Simple Object Access Protocol). Obˇe sluˇzby nejˇcastˇeji vyuˇz´ıvaj´ı standardn´ı internetov´ y protokol HTTP. SOAP se vyznaˇcuje striktnˇejˇs´ım z´apisem a nutnost´ı vytvoˇren´ı WSDL (Web Services Description Language) souboru, kde se uv´ad´ı moˇzn´e metody a jejich parametry pouˇz´ıvan´e pˇri komunikaci. Jako odpovˇed’ se pos´ıl´a nejˇcastˇeji poˇzadovan´ y serializovan´ y objekt, bud’ ve form´atu XML, JSON nebo jako prost´ y text, pˇriˇcemˇz je nutn´e jeho strukturu definovat v dokumentaci. Pro vytvoˇren´ı API zaloˇzen´eho na RESTu se v ASP.NET MVC vyuˇz´ıv´a rozloˇzen´ı projektu oznaˇcen´e jako WEB API. V pˇr´ıpadˇe SOAP je nutn´e vyuˇz´ıt WCF (Windows Communication Foundation) a vytvoˇrit sluˇzbu ide´alnˇe jako samostatnou knihovnu.
5.3
Prezentaˇ cn´ı vrstva
V n´avrhov´em vzoru MVC se tato vrstva ˇreˇs´ı na u ´rovni View. Definuje se zde webov´a str´anka, kter´a se pos´ıl´a klientovi jako odpovˇed’. V´ ysledn´a str´anka se skl´ad´a z textu, odkaz˚ u na obr´azky, obˇcas i na jin´a m´edia. Rozloˇzen´ı, typografick´e a barevn´e sch´ema se ˇreˇs´ı v kask´adov´ ych stylech (CSS). Dynamick´e chov´an´ı zajiˇst’uje ’ javascript, bud client-side nebo server-side pomoc´ı asynchronn´ıch dotaz˚ u AJAX (Asynchronous JavaScript and XML).
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
27
ASP.NET MVC narozd´ıl od klasick´eho ASP.NET nedefinuje ˇza´dn´e kontrolky a vzhled se mus´ı ˇreˇsit zcela od z´akladu pomoc´ı bˇeˇzn´ ych HTML tag˚ u a CSS. Existuj´ı n´astroje jako Telerik9 nebo DevExpress10 , kter´e pˇrid´avaj´ı snadno nastaviteln´e multifunkˇcn´ı komponenty, jako napˇr. gridy, grafy, kalend´aˇre, wysiwyg editory, atd., kter´e funguj´ı jako celek a odst´ın´ı tak program´atora od nutnosti ps´at vlastn´ı scripty ˇci styly. Nev´ yhodou je, ˇze jsou tyto n´astroje placen´e.
5.3.1
View engine
View engine je odpovˇedn´ y za vytv´aˇren´ı webov´ ych str´anek z tzv. view. View obsahuj´ı jak HTML znaˇcky, tak programov´ y k´od, kter´ y se pˇred odesl´an´ım ze serveru kompiluje. ASP.NET pouˇz´ıv´a vlastn´ı view engine naz´ yvan´ y WebForm, kde se programov´ y k´od zapisuje mezi tagy <% %> a <%: %>. S pˇr´ıchodem ASP.NET MVC3 pˇribyl do z´akladn´ıho v´ ybˇeru dalˇs´ı view engine Razor, kter´ y nab´ız´ı ˇcitelnˇejˇs´ı syntaxi:
@Model.PrihlasovaciJmeno
, pr´aci pˇr´ımo s ViewModely a obecnˇe l´epe respektuje architekturu MVC. Kromˇe z´akladn´ıch dvou engin˚ u existuje jeˇstˇe cel´a ˇrada alternativ, jako SharpTiles (ˇca´steˇcnˇe zaloˇzen´ y na JSTL z Javy), Spark View Engine (snaha splynout s HTML znaˇckami pro snazˇs´ı ˇcitelnost), NHaml, NDjango, Hasic, Brail, atd.
5.3.2
Razor rozloˇ zen´ı
Webov´a str´anka se m˚ uˇze skl´adat z n´asleduj´ıc´ıch tˇr´ı ˇc´ast´ı: • Layout – Definuje celkov´e rozloˇzen´ı str´anky – tradiˇcnˇe v´ ybˇerov´e menu, hlaviˇcku, obsahovou ˇc´ast, patiˇcku, atd. – B´ yv´a pro vˇsechny str´anky stejn´ y, mˇen´ı se pouze obsah, toho se doc´ıl´ı pˇr´ıkazem @RenderBody(), zde je pot´e um´ıstˇeno view vr´acen´e controllerem. – M˚ uˇze definovat vlastn´ı sekce pomoc´ı @RenderSection(), kter´e pot´e lze ve view modifikovat (typicky linkov´an´ı CSS nebo javascritu urˇcen´e pro konkr´etn´ı str´anku, zmˇena textu v menu, informaˇcn´ım prouˇzku apod.). 9 10
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
28
• View – Obsahuje informaci o zvolen´em layoutu, kter´ y se m´a pouˇz´ıt. – B´ yv´a sv´az´ana s ViewModelem, odkud se berou data. – Reprezentuje ˇc´ast s obsahem. – M˚ uˇze obsahovat tzv. partial view, kter´e reprezentuj´ı nˇejakou komponentu (pouˇzit´ı pomoc´ı @Html.Partial("NazevPartialView", model)). • Partial View – Menˇs´ı nedˇeliteln´ y celek, b´ yv´a sv´az´an s modelem, kde jsou um´ıstˇen´a data. – Mus´ı existovat view, kter´e ho zobrazuje. – Neum´ı pˇrepisovat sekce (nen´ı moˇzn´e pˇriˇradit mu vlastn´ı CSS nebo javascript soubory, ty se mus´ı linkovat jiˇz ve view). – Pouˇz´ıv´a se pro vˇetˇs´ı pˇrehlednost a eliminaci stejn´eho k´odu v r˚ uzn´ ych view. – Pouˇz´ıv´a se pro pr´aci s AJAXem. 5.3.3
Javascript
Jak jiˇz bylo zm´ınˇeno, javascript slouˇz´ı pro zajiˇstˇen´ı dynamick´eho chov´an´ı webov´e str´anky. Asi nejpopul´arnˇejˇs´ı knihovnou pro pr´aci s javascriptem je jQuery, kter´a se automaticky integruje do jak´ehokoliv ASP.NET MVC projektu. Vyuˇz´ıv´a se zde hlavnˇe pro validaci formul´aˇrov´ ych dat na stranˇe klienta s vyuˇzit´ım pluginu jQuery Validation. Tuto validaci je moˇzn´e zajiˇst’ovat automaticky – generuje se na z´akladˇe atribut˚ u uveden´ ych u jednotliv´ ych vlastnost´ı na ViewModelu. V´ yhodou pˇri uv´adˇen´ı validaˇcn´ıch atribut˚ u pˇr´ımo na modelu je jejich snadn´a kontrola i na u ´rovni serveru, kter´a je nezbytn´a, jelikoˇz pos´ılan´a data mohou b´ yt vˇzdy podvrˇzena. V´ yhodou jQuery je i znaˇcn´a ˇcetnost volnˇe dostupn´ ych plugin˚ u, kter´e ˇreˇs´ı rozliˇcn´e ˇcinnosti jako napˇr.: • jsTree – http://www.jstree.com – Umoˇzn ˇuje vytv´aˇren´ı interaktivn´ıch strom˚ u, pouˇziteln´e napˇr. pro tˇr´ıdˇen´ı produkt˚ u (tagy), • Select2 – http://ivaynberg.github.io/select2 – Upravuje pr´aci v´ ybˇerov´ ych pol´ı (HTML Select), nab´ız´ı vyhled´avac´ı pole, pˇrehledn´ y hromadn´ y v´ ybˇer a dynamick´e dotahov´an´ı dat. D´ale jQuery zjednoduˇsuje z´apis asynchronn´ıch dotaz˚ u na server pomoc´ı AJAX.
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
5.3.4
29
Kask´ adov´ e styly
Kask´adov´e styly je moˇzn´e spravovat bud’to rovnou, ale pro pokroˇcilou pr´aci s kask´adov´ ymi styly je moˇzn´e vyuˇz´ıt nˇekter´ y z CSS preprocesor˚ u, jako jsou Sass nebo LESS. Ty ˇca´steˇcnˇe ˇreˇs´ı ˇspatnou udrˇzitelnost kask´adov´ ych styl˚ u, kter´e se v pr˚ ubˇehu ˇcasu modifikuj´ı a rozˇsiˇruj´ı. Zav´ad´ı totiˇz do CSS nˇekter´e vlastnosti z programovac´ıch jazyk˚ u, jako jsou napˇr. ,,promˇenn´e“, ,,v´ yrazy“, ,,podm´ınky“, umoˇzn ˇuj´ı se vz´ajemnˇe importovat apod. Takto zapsan´e zdrojov´e k´ody se na pozad´ı rovnou pˇrekl´adaj´ı do v´ ysledn´ ych CSS soubor˚ u. [15] Nev´ yhodou m˚ uˇze b´ yt horˇs´ı podpora IntelliSense ve Visual Studiu. D´ale je pˇri n´avrhu web˚ u moˇzn´e vyuˇz´ıt jiˇz hotov´ ych frontend framework˚ u, kter´e zajiˇst’uj´ı modern´ı responzivn´ı vzhled, jako jsou Bootstrap ˇci Zurb Foundation. Jde o sadu n´astroj˚ u usnadˇ nuj´ıc´ı pr´aci s typografi´ı, tvorbu layoutu, vytv´aˇren´ı element˚ u uˇzivatelsk´eho rozhran´ı a z´aroveˇ n oˇsetˇruj´ıc´ı zobrazov´an´ı napˇr´ıˇc platformami. [16] Nev´ yhodou m˚ uˇze b´ yt problematick´a modifikace r˚ uzn´ ych styl˚ u, pokud je vyˇzadov´an jin´ y neˇz v´ ychoz´ı vzhled. Hod´ı se pˇrev´aˇznˇe pˇri v´ yvoji aplikac´ı, kter´e maj´ı sv˚ uj vzhled mˇenit dle pouˇzit´eho zaˇr´ızen´ı (desktop, tablety, chytr´e telefony).
5.3.5
Bundling a minifikace
Soubory kask´adov´ ych styl˚ u a javascriptu je moˇzn´e k pˇr´ısluˇsn´ ym str´ank´am pˇrilinko’ vat bud pˇr´ımo nebo se nab´ız´ı vyuˇzit´ı tzv. bundlingu. Pˇri nˇem doch´az´ı ke spojen´ı jednotliv´ ych – typicky na sobˇe z´avisl´ ych – soubor˚ u do jednoho virtu´aln´ıho souboru s vlastn´ı adresou, ˇc´ımˇz se redukuje poˇcet dotaz˚ u na server. To je velmi uˇziteˇcn´e vzhledem k faktu, ˇze vˇetˇsina dneˇsn´ıch nejpouˇz´ıvanˇejˇs´ıch prohl´ıˇzeˇc˚ u omezuje poˇcet souˇcasn´ ych pˇripojen´ı k jednomu hostname na ˇsest. [17] K sestaven´ı bundl˚ u doch´az´ı typicky pouze jednou a to pˇri startu aplikace. Pˇri kaˇzd´em nov´em sestaven´ı je vygenerov´ana pro jednotliv´e bundly vlastn´ı uri adresa, kter´a se skl´ad´a jak z nadefinovan´eho jm´ena, tak n´ahodn´eho hashe, ˇc´ımˇz je zajiˇstˇeno, ˇze prohl´ıˇzeˇc nepouˇzije starou verzi scriptu/stylu, kterou m˚ uˇze m´ıt v cache, protoˇze se z jeho pohledu jedn´a o nov´ y soubor. Po bundlingu se prov´ad´ı nad vytvoˇren´ ymi virtu´aln´ımi souboru jeˇstˇe minifikace, jej´ımˇz u ´ˇcelem je zmenˇsit odes´ılan´e soubory a cel´ y proces komunikace s klientem tak urychlit.
5.3.6
Pˇ reklady prostˇ red´ı
Pro tvorbu pˇreklad˚ u prostˇred´ı se v .NET standardnˇe vyuˇz´ıv´a tzv. Resource soubor˚ u (.resx). Jedn´a se o XML soubory s pevnˇe danou strukturou, kter´a v sobˇe m˚ uˇze uchov´avat informace v r˚ uzn´ ych form´atech (texty, obr´azky, ikony, audio, obecnˇe soubory a ostatn´ı). Pro pˇr´ıpad textu je ve v´ ypisu 4 naznaˇcen pˇr´ıklad z´apisu. Skl´ad´a
5 Anal´ yza ˇreˇsen´ı s vyuˇzit´ım platformy ASP.NET MVC
30
se ze tˇr´ı z´akladn´ıch ˇca´st´ı – unik´atn´ıho jm´ena, kter´e slouˇz´ı pro rozliˇsen´ı z´aznam˚ u (,,ErrorMessage“), hodnoty a voliteln´eho koment´aˇre. 1 2 3 4
Pˇ rihlaˇ sovac´ ı jm´ eno je povinn´ y ´ udaj.Chybov´ a hl´ aˇ ska
V´ ypis 4: Uk´azka z´aznamu v .resx souboru. V praxi se nejprve se vytvoˇr´ı z´akladn´ı .resx soubor s v´ ychoz´ımi texty, obr´azky, atd. Pˇr´ıstup k tˇemto z´aznam˚ um je v k´odu dostupn´ y pomoc´ı tˇr´ıdy ResourceManager. Pro pˇreklady do jin´ ych jazyk˚ u se vytv´aˇr´ı vlastn´ı .resx soubory, kter´e se jmenuj´ı stejnˇe, ale pˇred pˇr´ıponou obsahuj´ı informaci o zvolen´em jazyku a kultuˇre. Pro anglick´ y pˇreklad se tedy vytvoˇr´ı .en.resx, pro slovensk´ y .sk.resx atp. Je moˇzn´e specifikovat i konkr´etn´ı kulturu, takˇze pro americkou angliˇctinu se pouˇzije en-US.resx. V pˇrekladov´ ych Resource souborech se pouˇzij´ı stejn´e identifik´atory a pˇreloˇzen´e entity (texty, obr´azky, . . . ). Pro pˇreklady je tak´e moˇzn´e vyuˇz´ıt nˇekterou z knihoven, napˇr. FairlyLocal11 . Nepˇr´ıliˇs vhodnou alternativou m˚ uˇze b´ yt i zaˇclenˇen´ı pˇreklad˚ u pˇr´ımo do zdrojov´ ych k´od˚ u programu.
5.4
Spr´ ava verz´ı
Pro spr´avu verz´ı je moˇzn´e vyuˇz´ıt TFS (Team Foundation Server), kter´ y je pˇr´ımo integrov´an do v´ yvojov´eho prostˇred´ı, nebo instalace SVN (Apache Subversion). V druh´em pˇr´ıpadˇe je moˇzn´e spravovat verze zdrojov´eho k´odu mimo v´ yvojov´e prostˇred´ı nebo vyuˇzit´ı nˇekter´eho z rozˇs´ıˇren´ı pro integraci SVN pˇr´ımo do Visual Studia. V obou pˇr´ıpadech je nutn´e zˇr´ıdit si server pro ukl´ad´an´ı z´alohovan´ ych a verzovan´ ych dat.
11
http://www.fairtutor.com/fairlylocal
6 N´avrh aplikace ,,virtu´aln´ı sklady“
6
31
N´ avrh aplikace ,,virtu´ aln´ı sklady“
V t´eto kapitole se uv´ad´ı n´avrh ˇreˇsen´ı aplikace ,,virtu´aln´ı sklady“, pracovnˇe pojmenovan´e jako Vinry (vzniklo zkr´acen´ım anglick´eho origin´alu Virtual Inventory).
6.1
Terminologie
Kromˇe n´ıˇze uveden´ ych uˇzivatelsk´ ych rol´ı se d´ale v textu pouˇz´ıvaj´ı n´asleduj´ıc´ı term´ıny:
Produkt Obecn´ y produkt/v´ yrobek, kter´ y reprezentuje zboˇz´ı uskladnˇen´e ve virtu´aln´ım skladu. Pˇredpokl´adaj´ı se ,,neproblematick´e produkty“, tud´ıˇz sem nepatˇr´ı potraviny, chemik´alie, zv´ıˇrata, apod.
Jazyk prostˇ red´ı Jazyk webov´eho prostˇred´ı – GUI (Graphical User Interface).
Jazyk obsahu Jazykovˇe/lokaˇcnˇe z´avisl´e informace o produktu, jako je napˇr´ıklad cena, popis produktu aj. Nejedn´a se o jazyk webov´eho prostˇred´ı.
Objedn´ avka Seznam zboˇz´ı vˇc. jeho mnoˇzstv´ı, kter´ y sestavil vlastn´ık zboˇz´ı a kter´e m´a b´ yt zabaleno a odesl´ano zvolenou expediˇcn´ı sluˇzbou koneˇcn´emu z´akazn´ıkovi.
Dod´ avka Seznam zboˇz´ı vˇc. jeho mnoˇzstv´ı, kter´ y sestavil vlastn´ık zboˇz´ı a kter´e m´a b´ yt ve skladu oˇcek´av´ano pro pˇr´ıjem a naskladnˇen´ı.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
6.2
32
Rozdˇ elen´ı uˇ zivatel˚ u podle rol´ı
Vlastn´ık zboˇ z´ı Vlastn´ıkem zboˇz´ı je myˇslen subjekt (typicky organizace), pod kterou m˚ uˇze spadat jeden nebo i v´ıce uˇzivatel˚ u. Kaˇzd´ y takov´ y uˇzivatel m´a stejn´a pr´ava a m˚ uˇze prov´adˇet stejn´e akce. Jak jiˇz n´azev napov´ıd´a, jedn´a se o pr´avoplatn´eho vlastn´ıka zboˇz´ı, kter´ y vyuˇz´ıv´a virtu´aln´ı sklady pro uskladnˇen´ı sv´eho zboˇz´ı. Z´akladn´ı akce: • Vytv´aˇren´ı nov´ ych produktov´ ych list˚ u (ruˇcnˇe ˇci automatizovan´ y import). • Pˇrikl´ad´an´ı glob´aln´ıch i lok´aln´ıch informac´ı o produktu, pˇripojov´an´ı obr´azk˚ u a soubor˚ u. • Vytv´aˇren´ı ˇst´ıtk˚ u a pˇriˇrazen´ı ˇst´ıtk˚ u k produkt˚ um. • Vytv´aˇren´ı dod´avek pro pˇr´ıjem zboˇz´ı do sklad˚ u. • Vytv´aˇren´ı objedn´avek pro odesl´an´ı zboˇz´ı ke koncov´emu z´akazn´ıkovi. • Zobrazen´ı osobn´ıch report˚ u. Spr´ avce Jedn´a se o administr´atora cel´eho syst´emu. Je pouze jeden. Z´akladn´ı akce: • Pˇrid´av´an´ı nov´ ych sklad˚ u, vlastn´ık˚ u zboˇz´ı, skladn´ık˚ u a jmenov´an´ı vrchn´ıch skladn´ık˚ u. • Zobrazen´ı vˇsech report˚ u. • Zobrazen´ı log˚ u. Skladn´ık Zamˇestnanec skladu, kter´ y fyzicky manipuluje se zboˇz´ım. M´a pˇr´ıstup pouze k informac´ım, kter´e jsou pro nˇej nezbytn´e – jako jsou produkty vlastn´ıka zboˇz´ı, kter´e se v´aˇzou k dan´emu skladu (bez cen); dod´avky a objedn´avky.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
33
Z´akladn´ı akce: • Pˇr´ıjem zboˇz´ı na z´akladˇe dodac´ıch list˚ u. • Reklamace poˇctu kus˚ u pˇrij´ıman´eho zboˇz´ı. • Odes´ıl´an´ı zboˇz´ı koneˇcn´emu z´akazn´ıkovi na z´akladˇe objedn´avek od vlastn´ıka zboˇz´ı (vid´ı souˇcet cen kv˚ uli pojiˇstˇen´ı). • Zobrazen´ı vˇsech vlastn´ık˚ u zboˇz´ı, jejich produkt˚ u a z´akazn´ık˚ u evidovan´ ych k dan´emu skladu. Vrchn´ı skladn´ık Jedn´a se o skladn´ıka s rozˇs´ıˇren´ ymi pravomocemi – m˚ uˇze pˇrid´avat nov´e skladn´ıky pro sv˚ uj sklad, m´a pˇr´ıstup k citlivˇejˇs´ım u ´daj˚ um jako jsou napˇr. ceny produkt˚ u.
6.3
Vlastn´ık zboˇ z´ı
Popis d´ılˇc´ıch akc´ı uˇzivatele s pr´avy ,,vlastn´ık zboˇz´ı“. 6.3.1
Nastaven´ı
V sekci nastaven´ı m˚ uˇze mˇenit sv´e osobn´ı u ´daje, jako je heslo, v´ ychoz´ı jazyk a poˇcet z´aznam˚ u na str´anku i nastaven´ı cel´eho subjektu, jako je ˇc´ıslo u ´ˇctu a hodnota DPH. Z´aroveˇ n se zde nach´az´ı spr´ava uˇzivatel˚ u dan´eho subjektu, kter´e je moˇzn´e pˇrid´avat nebo naopak mazat. Nen´ı povoleno smazat sv˚ uj vlastn´ı u ´ˇcet. 6.3.2
Produkty
V sekci produkty je umoˇznˇeno si proch´azet a filtrovat existuj´ıc´ı produkty. Je moˇzn´e si pˇrid´avat nov´e, zobrazovat a editovat st´avaj´ıc´ı. K produktu mohou b´ yt pˇripojeny obr´azky i soubory. Smaz´an´ı produktu je povoleno pouze pokud se s n´ım ˇza´dn´ ym zp˚ usobem nepracovalo, tedy pokud nen´ı souˇca´st´ı ˇz´adn´e objedn´avky ani dod´avky. 6.3.3
Z´ akazn´ıci
V sekci z´akazn´ıci je umoˇznˇeno si proch´azet a filtrovat existuj´ıc´ı z´akazn´ıky. Je moˇzn´e si pˇrid´avat nov´e, zobrazovat a editovat st´avaj´ıc´ı. U z´akazn´ıka lze evidovat jednu nebo v´ıce adres. Smaz´an´ı z´akazn´ıka je povoleno pouze pokud se s n´ım ˇza´dn´ ym zp˚ usobem nenakl´adalo – nesm´ı b´ yt souˇc´ast´ı ˇza´dn´e objedn´avky.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
6.3.4
34
Objedn´ avky
V sekci objedn´avky je umoˇznˇeno si proch´azet a filtrovat existuj´ıc´ı objedn´avky. Je moˇzn´e vytv´aˇret nov´e a zobrazovat st´avaj´ıc´ı. Objedn´avky nen´ı nutn´e ihned po vytvoˇren´ı odeslat, je umoˇznˇeno udrˇzovat jejich koncept – ten se d´a editovat, mazat nebo odeslat. Po odesl´an´ı jiˇz nelze objedn´avky editovat ani mazat. Pˇri sestavov´an´ı objedn´avky je nutn´e nejprve zvolit sklad, pot´e aˇz seznam produkt˚ u, jejich poˇcet, adresu koncov´eho z´akazn´ıka a poˇzadovanou spediˇcn´ı sluˇzbu. V pˇr´ıpadˇe zmˇeny skladu jsou vˇsechny u ´daje smaz´any a je nutn´e je navolit znovu. Objedn´avka si proch´az´ı n´asleduj´ıc´ımi stavy: • Koncept – rozpracov´ana vlastn´ıkem zboˇz´ı, je moˇzn´e ji editovat, • odeslan´ a – objedn´avka se nyn´ı zobrazuje skladn´ık˚ um dan´eho skladu, je moˇzn´e ji editovat, • pˇ rijata – nˇejak´ y skladn´ık se j´ı ujal, je moˇzn´e ji stornovat, • stornovan´ a – voliteln´ y koncov´ y stav, • zpracovan´ a – skladn´ık pˇripravil bal´ık/y k odesl´an´ı, • vydan´ a – expediˇcn´ı sluˇzba pˇrevzala bal´ık/y, • uzavˇ ren´ a – koncov´ y stav, vlastn´ık zboˇz´ı oznaˇcil objedn´avku za dokonˇcenou. 6.3.5
Dodac´ı listy
Pro dodac´ı listy plat´ı stejn´ y pˇr´ıstup jako pro objedn´avky s v´ yjimkou urˇcov´an´ı z´akazn´ıka. Zboˇz´ı v tomto pˇr´ıpadˇe pˇrich´az´ı na sklad a ne obr´acenˇe. Dodac´ı list si proch´az´ı n´asleduj´ıc´ımi stavy: • Koncept – rozpracovan´ y vlastn´ıkem zboˇz´ı, je moˇzn´e ho editovat, • odeslan´ y – dodac´ı list se nyn´ı zobrazuje skladn´ık˚ um dan´eho skladu, je moˇzn´e ho editovat, • pˇrijat´ y – nˇejak´ y skladn´ık se ho ujal, editace jiˇz nen´ı moˇzn´a, • reklamovan´ y – voliteln´ y stav; dle skladn´ıka nesouhlas´ı poˇcty kus˚ u, vlastn´ık zboˇz´ı je informov´an o poˇctu kus˚ u, ke kter´ ym doˇsel skladn´ık; tento stav trv´a dokud vlastn´ık neodsouhlas´ı poˇcet kus˚ u zadan´ y skladn´ıkem. V pˇr´ıpadˇe rozpor˚ u je nutn´e probl´em ˇreˇsit mimo syst´em. Skladn´ık m˚ uˇze reklamovan´ y poˇcet kus˚ u editovat, dokud ten nen´ı schv´alen vlastn´ıkem zboˇz´ı.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
35
• uzavˇren´ y – koncov´ y stav, m˚ uˇze nastat dvˇema zp˚ usoby: 1. Skladn´ık nenahl´asil reklamaci a oznaˇcil dodac´ı list za uzavˇren´ y, 2. Skladn´ık nahl´asil reklamaci a list mus´ı uzavˇr´ıt vlastn´ık zboˇz´ı.
6.3.6
Reporty
Sekce reporty je pouze pro ˇcten´ı – formou tabulek jsou zde zobrazeny transakce za jednotliv´e mˇes´ıce rozdˇelen´e podle sklad˚ u. Pˇri kliknut´ı na konkr´etn´ı transakci je uˇzivateli zobrazen detail podle typu transakce (objedn´avka nebo dod´avka). Kaˇzd´a tabulka obsahuje i sumarizaˇcn´ı ˇra´dek. D´ale je zde ke staˇzen´ı vy´ uˇctov´an´ı za sluˇzby spojen´e s veden´ım jednotliv´ ych sklad˚ u, kter´e sem nahr´av´a spr´avce syst´emu jako soubory form´atu PDF.
6.4
Skladn´ık
Popis jednotliv´ ych akc´ı uˇzivatele s pr´avy skladn´ıka. Skladn´ıkovi se nezobrazuj´ı ceny a to ani v pˇr´ıpadˇe, ˇze m´a zobrazen stejn´ y v´ ypis jako vlastn´ık zboˇz´ı, napˇr. detail produktu, objedn´avky, dod´avky atd. Jedin´ y rozd´ıl je zobrazen´ı celkov´e ceny bal´ık˚ u objedn´avek, kterou je nutn´e zn´at.
6.4.1
Dodac´ı listy
V sekci dodac´ı listy je zobrazen seznam existuj´ıc´ıch dodac´ıch list˚ u v dan´em skladu. Dodac´ı listy je moˇzn´e filtrovat podle stav˚ u popsan´ ych v´ yˇse v sekci 6.3.5 (pouze koncepty nejsou zobrazov´any) a z´aroveˇ n si m˚ uˇze skladn´ık nechat zobrazit pouze dodac´ı listy, kter´ ych se ujal – tedy takov´e, s kter´ ymi m˚ uˇze pracovat. Kaˇzd´ y skladn´ık dan´eho skladu si m˚ uˇze zobrazit libovoln´ y dodac´ı list pro ˇcten´ı. V pˇr´ıpadˇe, ˇze nen´ı dodac´ı list nikomu pˇriˇrazen, m˚ uˇze se ho skladn´ık ujmout. Tato akce je nevratn´a, jiˇz pˇriˇrazen´emu dodac´ımu listu nen´ı moˇzn´e zmˇenit skladn´ıka. Skladn´ık zodpov´ıd´a za pˇrevzet´ı zboˇz´ı a jeho kontrolu. V pˇr´ıpadˇe nesouladu zad´a skladn´ık do syst´emu reklamaci, kterou mus´ı vlastn´ık zboˇz´ı schv´alit.
6.4.2
Objedn´ avky
V sekc´ı objedn´avky je zobrazen seznam existuj´ıc´ıch objedn´avek v dan´em skladu. Objedn´avky je moˇzn´e filtrovat podle stav˚ u popsan´ ych v´ yˇse v sekci 6.3.4 (pouze
6 N´avrh aplikace ,,virtu´aln´ı sklady“
36
koncepty nejsou zobrazov´any) a z´aroveˇ n si m˚ uˇze skladn´ık nechat zobrazit pouze objedn´avky, kter´ ych se ujal – tedy takov´e, s kter´ ymi m˚ uˇze pracovat. Kaˇzd´ y skladn´ık dan´eho skladu si m˚ uˇze zobrazit libovolnou objedn´avku pro ˇcten´ı. V pˇr´ıpadˇe, ˇze nen´ı objedn´avka nikomu pˇriˇrazena, m˚ uˇze se j´ı skladn´ık ujmout. Tato akce je nevratn´a, jiˇz pˇriˇrazen´e objedn´avce nen´ı moˇzn´e zmˇenit skladn´ıka. Dokud neoznaˇc´ı skladn´ık objedn´avku jako zpracovanou, m˚ uˇze ji vlastn´ık zboˇz´ı stornovat. S takovou objedn´avkou nelze nad´ale pracovat. 6.4.3
Nastaven´ı
V sekci nastaven´ı m˚ uˇze mˇenit sv´e osobn´ı u ´daje, jako je heslo a poˇcet z´aznam˚ u zobrazen´ ych na str´anku. 6.4.4
Subjekty
V sekci subjekty je seznam vˇsech vlastn´ık˚ u zboˇz´ı (nejsou zde zohledˇ nov´ani konkr´etn´ı uˇzivatel´e, pouze cel´e subjekty). Cel´a sekce je urˇcena pouze pro ˇcten´ı. Po kliknut´ı na konkr´etn´ıho vlastn´ıka se zobraz´ı jeho detail se ˇctyˇrmi z´aloˇzkami – v´ yˇcet vˇsech objedn´avek, dod´avek, z´akazn´ık˚ u a produkt˚ u, kter´e se v´aˇzou k dan´emu skladu.
6.5 6.5.1
Spr´ avce Editace ˇ c´ıseln´ık˚ u
V t´eto sekci je moˇzn´e zobrazit si a editovat hodnoty vˇetˇsiny tabulek typu ˇc´ıseln´ık (viz sekce 6.7). Konkr´etnˇe se jedn´a o v´ yˇcet jazyk˚ u, st´at˚ u a expediˇcn´ıch sluˇzeb dostupn´ ych konkr´etn´ım sklad˚ um. Nen´ı umoˇznˇeno maz´an´ı hodnot, kter´e se jiˇz nˇekde pouˇz´ıvaj´ı. 6.5.2
Spr´ ava sklad˚ u
V t´eto sekci je moˇzn´e zobrazit si a editovat u ´daje o skladech (adresa a n´azev). U detailu skladu je seznam skladn´ık˚ u a vlastn´ık˚ u zboˇz´ı, kteˇr´ı jsou s t´ımto skladem sv´az´ani. Nad skladn´ıky lze prov´adˇet standardn´ı CRUD akce (create, read, update, delete). V pˇr´ıpadˇe maz´an´ı nedoch´az´ı k fyzick´emu maz´an´ı z datab´aze, ale k pouh´emu skryt´ı (zamknut´ı). K zamˇcen´emu u ´ˇctu nen´ı moˇzn´e se pˇrihl´asit, takov´ y u ´ˇcet se chov´a jako neexistuj´ıc´ı. Kromˇe bˇeˇzn´ ych u ´daj˚ u uveden´ ych v 6.4.3 je moˇzn´e pˇridˇelit ˇci odebrat skladn´ıkovi roli vrchn´ıho skladn´ıka.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
6.5.3
37
Spr´ ava subjekt˚ u
Nad vlastn´ıky zboˇz´ı lze rovnˇeˇz prov´adˇet CRUD akce. V detailu subjektu je k dispozici jeho report, je zde moˇzn´e nahr´avat a mazat soubory (mˇes´ıˇcn´ı vy´ uˇctov´an´ı) a nach´az´ı se zde spr´ava uˇzivatel˚ u dan´eho subjektu s kterou jdou opˇet prov´adˇet CRUD akce.
6.5.4
Logy
V sekci logy se nach´az´ı jednoduch´ y sekvenˇcn´ı v´ ypis akc´ı uˇzivatel˚ u. Eviduje se n´azev uˇzivatele, proveden´a akce, pozn´amka a ˇcas. Jsou zde zaznamen´av´any i p´ady aplikace, pˇriˇcemˇz do pozn´amky se ukl´ad´a zachycen´e chybov´e hl´aˇsen´ı.
6.6
Struktura aplikace
Aplikace byla rozdˇelena do tˇr´ı logick´ ych celk˚ u, kter´e jsou v r´amci cel´eho ˇreˇsen´ı (Solution) zastoupeny n´asleduj´ıc´ımi projekty: 1. TT.Vinry.DAL Tento projekt ˇreˇs´ı pˇr´ıstup a pr´aci s daty – DAL (data access layer). Obsahuje ORM vytvoˇren´ y pomoc´ı Entity Frameworku metodou database first. Jeho v´ ystupem je samostatn´a knihovna, kter´a m˚ uˇze b´ yt pouˇzita i v jin´ ych aplikac´ıch. 2. TT.Vinry.Importer Jednoduch´a WPF (Windows Presentation Foundation) aplikace, kter´a umoˇzn ˇuje importovat data z vzorov´e dBase datab´aze (exportovan´a z ekonomick´eho informaˇcn´ıho syst´emu SQL Ekonom), kter´ y obsahuje seznam testovac´ıch produkt˚ u. K pˇr´ıstupu k datab´azi vyuˇz´ıv´a TT.Vinry.DAL. 3. TT.Vinry.Web Hlavn´ı projekt webov´eho syst´emu – ˇreˇs´ı se zde GUI, aplikaˇcn´ı logika a pomoc´ı knihovny TT.Vinry.DAL se zde pracuje s daty. Zdrojov´e k´ody i koment´aˇre jsou psan´e v anglick´em jazyce, jsou dodrˇzov´any z´asady dle [18] pro ˇst´abn´ı kulturu.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
38
Obr´azek 10: Pouˇzit´ y n´avrhov´ y vzor Repository. [19]
Pro v´ yvoj byl zvolen´ y n´avrhov´ y vzor Repository, kter´ y vytv´aˇr´ı abstraktn´ı vrstvu mezi datovou vrstvou a aplikaˇcn´ı logikou. Princip je zn´azornˇen na obr´azku 10.
6.7
Model
Kv˚ uli oproˇstˇen´ı od mnoˇzstv´ı rutinn´ıch u ´kon˚ u pˇri prac´ı s datab´az´ı bude pouˇzit ORM – konkr´etnˇe s vyuˇzit´ım ADO.NET Entity Frameworku, kter´ y vygeneruje objektovou strukturu. V´ yhodou je kromˇe siln´eho typov´an´ı, IntelliSense a validace pˇri kompilaci i automatick´e vytvoˇren´ı tˇr´ıd pro pr´aci s daty – kontejner˚ u. Toho se vyuˇz´ıv´a v projektu TT.Vinry.DAL i ve vˇsech dalˇs´ıch projektech, kter´e tuto knihovnu vyuˇz´ıvaj´ı. Jelikoˇz jsou pro view obˇcas potˇreba data s jinou strukturou, neˇz kter´a odpov´ıd´a tabulk´am v datab´azi, definuj´ı se v projektu TT.Vinry.Web dalˇs´ı tˇr´ıdy modelu, tzv. ViewModel tˇr´ıdy. Kaˇzd´a str´anka nese informaci o tom, jak´ y ViewModel je j´ı od controlleru pˇred´av´an, aby mohla s daty sn´aze nakl´adat.
6.7.1
Relaˇ cn´ı datab´ azov´ y model
V pˇr´ıloze B je zn´azornˇen diagram navrhovan´eho relaˇcn´ıho datab´azov´eho modelu, kter´ y byl schv´alen z´akazn´ıkem. Pˇri jeho vytv´aˇren´ı se vych´azelo z doporuˇcen´ı [20, 21] pro tvorbu efektivn´ıch datov´ ych model˚ u.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
6.7.2
39
Popis tabulek
Pomoc´ı odsazen´ı je naznaˇceno logick´e zaˇrazen´ı jednotliv´ ych tabulek kv˚ uli snazˇs´ı orientaci. OWNER reprezentuje subjekt vlastn´ıka zboˇz´ı. OWNERUSER reprezentuje jednotliv´e uˇzivatele subjektu. LANGUAGE rozkladov´a tabulka mezi subjektem a vˇsemi jazyky (urˇcuje v jak´ ych jazyc´ıch m˚ uˇze b´ yt zad´av´an obsah). POSSIBLELANGUAGES tabulka typu ˇc´ıseln´ık, obsahuje v´ yˇcet dostupn´ ych jazyk˚ u. OWNERINVENTORY rozkladov´a tabulka mezi vlastn´ıkem zboˇz´ı a sklady (urˇcuje jak´e sklady m˚ uˇze vlastn´ık vyuˇz´ıvat). PRODUCT reprezentuje vˇsechny produkty vlastn´ıka zboˇz´ı. PRODUCTINVENTORY rozkladov´a tabulka mezi produktem a skladem (urˇcuje poˇcet kus˚ u dan´eho produktu v dan´em skladu). PRODUCTIMAGE reprezentuje obr´azky v´azan´e k dan´emu produktu. PRODUCTDATA reprezentuje jazykovˇe z´avisl´a data produktu (n´azev, cena, . . . ). PRODUCTFILE reprezentuje jazykovˇe z´avisl´e soubory v´azan´e k produktu (manu´aly, let´aky, . . . ). DELIVERYPRODUCT rozkladov´a tabulka mezi dod´avkou a produktem (urˇcuje pˇr´ıchoz´ı zboˇz´ı na sklad). ORDERPRODUCT rozkladov´a tabulka mezi objedn´avkou a produktem (urˇcuje zboˇz´ı, kter´e m´a b´ yt odesl´ano z´akazn´ıkovi). PRODUCTTAG rozkladov´a tabulka mezi produktem a tagem (urˇcuje do jak´ ych skupin produkt n´aleˇz´ı). TAG tabulka typu ˇc´ıseln´ık, obsahuje v´ yˇcet vˇsech tag˚ u. CUSTOMER tabulka pro z´akazn´ıky vlastn´ıka zboˇz´ı. DELIVERYADRESS tabulka s adresami z´akazn´ık˚ u. INVENTORY reprezentuje virtu´aln´ı sklady. COUNTRY tabulka typu ˇc´ıseln´ık, reprezentuje st´aty pod kter´e m˚ uˇze sklad patˇrit. STOREMAN reprezentuje skladn´ıky. DELIVERYTYPE tabulka typu ˇc´ıseln´ık, urˇcuje spediˇcn´ı sluˇzby dostupn´e dan´emu skladu. ORDER reprezentuje objedn´avky odes´ılan´e koneˇcn´emu z´akazn´ıkovi.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
40
ORDERSTATE rozkladov´a tabulka mezi stavem a objedn´avkou (urˇcuje stavy objedn´avek). OSTATE tabulka typu ˇc´ıseln´ık, obsahuje v´ yˇcet stav˚ u objedn´avek. DELIVERY reprezentuje dod´avky – produkty kter´e maj´ı b´ yt naskladnˇeny. DELIVERYSTATE rozkladov´a tabulka mezi stavem a dod´avkou (urˇcuje stavy dod´avek). DSTATE tabulka typu ˇc´ıseln´ık, obsahuje v´ yˇcet stav˚ u dod´avek.
6.7.3
Pˇ r´ıstupov´ a pr´ ava
Protoˇze maj´ı jednotliv´e uˇzivatelsk´e role znaˇcnˇe rozd´ıln´e moˇznosti nakl´ad´an´ı se syst´emem, jsou v datab´azi evidov´any na r˚ uzn´ ych m´ıstech. Neexistuje tedy ˇz´adn´a samostatn´a tabulka se vˇsemi uˇzivateli. Vlastn´ık zboˇz´ı je evidov´an v tabulce OWNER, resp. OWNERUSER, zat´ımco skladn´ık v tabulce STOREMAN. Jelikoˇz je spr´avce jiˇz v n´avrhu pouze jeden, nen´ı evidov´an v datab´azi, ale v konfiguraˇcn´ım souboru web.config, viz v´ ypis 5. 1 2 3 4 5 6
V´ ypis 5: Zad´an´ı pˇrihlaˇsovac´ıch u ´daj˚ u ve web.config. Hesla vˇsech uˇzivatel˚ u se kryptuj´ı pomoc´ı algoritmu PBKDF2.
6.7.4
Validace dat
Pokud uˇzivatel pos´ıl´a pˇres webov´ y formul´aˇr nˇejak´a data, je tato data nutn´e validovat – ide´alnˇe na stranˇe klienta pomoc´ı javascriptu, pokaˇzd´e vˇsak na stranˇe serveru. Mus´ı se poˇc´ıtat s t´ım, ˇze uˇzivatel m˚ uˇze b´ yt u ´toˇcn´ık a pˇrij´ıman´a data mohou b´ yt u ´myslnˇe upravena. Pro vyˇreˇsen´ı validace na obou stran´ach z´aroveˇ n se vyuˇz´ıv´a validaˇcn´ıch atribut˚ u v kombinaci s view enginem Razor. Formul´aˇre vytv´aˇr´ı, jak je uvedeno ve v´ ypisu 6. Nejprve se vytvoˇr´ı blok, kde se definuje jak´a akce (EditProduct) v jak´em controlleru (Products) se m´a volat jak´ ym zp˚ usobem (POST). Na z´akladˇe toho se vygeneruje formul´aˇr s pˇr´ısluˇsnou uri adresou dle pˇrednastaven´eho routov´an´ı.
Formul´aˇr m˚ uˇze obsahovat libovoln´e HTML znaˇcky pro zajiˇstˇen´ı vzhledu a struktury v´ ysledn´e webov´e str´anky, typicky se jedn´a o div bloky nebo tabulku v kombinaci s CSS. 1 2 3 4
V´ ypis 7: Pouˇzit´ı validaˇcn´ıch a zobrazovac´ıch atribut˚ u u ViewModelu. Jelikoˇz m´a str´anka definovan´ y ViewModel s kter´ ym m˚ uˇze pracovat, je moˇzn´e ho vyuˇz´ıt pro vytvoˇren´ı jednotliv´ ych prvk˚ u formul´aˇre a pˇri odesl´an´ı bude na controller posl´an naplnˇen´ y objekt. U ViewModelu lze pro jednotliv´e vlastnosti vyuˇz´ıt jak atribut˚ u nejen pro validaci, ale i pro zobrazen´ı.
6.8
View
Jelikoˇz byl poˇzadov´an jednoduch´ y modern´ı vzhled s intuitivn´ım ovl´ad´an´ım, byl na z´akladˇe domluvy nejprve vytvoˇren tzv. prototyp webu, kter´ y se skl´adal z prost´eho HTML a obr´azk˚ u a kter´ y navrhovan´e GUI prezentoval. Ten byl pˇredloˇzen ke schv´alen´ı zadavatelem.
6.8.1
Schv´ alen´ y grafick´ y n´ avrh
Na obr´azku 11 je vidˇet schv´alen´a podoba grafick´eho n´avrhu z pohledu vlastn´ıka zboˇz´ı. V hlaviˇcce je vlevo vidˇet textov´e pracovn´ı logo, kter´e se bude pˇri nasazen´ı na produkci aktualizovat, vpravo je vidˇet ,,uˇzivatelsk´ y box“, kde je um´ıstˇen n´azev vlastn´ıka, alias subjektu (Timex), jm´eno uˇzivatele (User1) a tlaˇc´ıtka pro zmˇenu
6 N´avrh aplikace ,,virtu´aln´ı sklady“
42
nastaven´ı a odhl´aˇsen´ı, a pˇrep´ınaˇc jazyk˚ u pro prostˇred´ı. V menu pod hlaviˇckou jsou vidˇet jednotliv´e sekce, do kter´ ych m´a uˇzivatel pˇr´ıstup.
Obr´azek 11: Schv´alen´ y vzhled GUI. V r´amci produkt˚ u je uˇzivateli zobrazena z´aloˇzka vˇsech produkt˚ u nebo je moˇzn´e omezit pohled pouze na produkty v konkr´etn´ıch skladech. Vpravo se nach´az´ı tlaˇc´ıtko pro standardn´ı akci, v tomto pˇr´ıpadˇe pˇrid´an´ı nov´eho produktov´eho listu. D´ale je zde menu pro v´ ybˇer jazyka obsahu. Jednotliv´e produkty jsou zobrazeny v tabulce, kter´a umoˇzn ˇuje vyhled´av´an´ı dle n´azvu nebo ˇc´ısla produktu, coˇz byl poˇzadavek zadavatele. V´ ysledky jsou str´ankovan´e a lze je ˇradit podle libovoln´eho sloupce. Po kliknut´ı na produkt je zobrazen jeho detail. Uk´azka detailu je vidˇet na obr´azku 12. Detail produktu je vertik´alnˇe rozdˇelen na dvˇe logick´e ˇca´sti – jazykovˇe z´avisl´a a jazykovˇe nez´avisl´a data. Jazykovˇe nez´avisl´a data jsou pro vˇsechny v´ yskyty dan´eho produktu stejn´a, jazykovˇe z´avisl´a data se mˇen´ı podle zvolen´e jazykov´e verze. D˚ uvodem je vyuˇzit´ı tohoto syst´emu v r´amci r˚ uzn´ ych zem´ı a pˇr´ıpadn´e budouc´ı napojen´ı na e-shop veden´ y pro danou zemi. Mezi jazykovˇe z´avisl´e u ´daje se poˇc´ıt´a i cena, kter´a ale ve skuteˇcnosti nen´ı z´avisl´a na jazyku, ale na konkr´etn´ım st´atu.
6 N´avrh aplikace ,,virtu´aln´ı sklady“
43
To je ovˇsem moˇzn´e zohlednit pˇr´ımo pˇri definov´an´ı jazyk˚ u, kdy napˇr. pro nˇemˇcinu budou existovat dvˇe jazykov´e verze: ,,Deutsch (DE)“ pro Nˇemecko a ,,Deutsch (AT)“ pro Rakousko.
Obr´azek 12: Uk´azka detailu produktu.
Obr´azek 13: Objedn´avky.
6.8.2
Layout
Pro vˇsechny view se vytvoˇr´ı jednotn´a sd´ılen´a Layout.cshtml str´anka, kter´a bude respektovat schv´alenou podobu. Na u ´rovni layoutu se bude ˇreˇsit navigace po syst´e-
6 N´avrh aplikace ,,virtu´aln´ı sklady“
44
mu a budou se zde definovat sekce pro vkl´ad´an´ı CSS a javascriptu, na nichˇz jsou z´avisl´a konkr´etn´ı view.
6.9
Controller
Nepoˇc´ıt´a se s velkou z´atˇeˇz´ı syst´emu, tedy velk´ ym poˇctem uˇzivatel˚ u, kteˇr´ı by pracovali ve stejnou chv´ıli (ˇr´adovˇe des´ıtky, maxim´alnˇe stovky). Je tedy moˇzn´e ovˇeˇrovat uˇzivatele pˇri kaˇzd´em dotazu na server a zajistit tak pˇr´ıpadnˇe jeho odhl´aˇsen´ı, pokud mu byla odebr´ana pr´ava. Toho se d´a doc´ılit vlastn´ım pˇreps´an´ım autorizaˇcn´ıho atributu, kter´ y je u pˇrihl´aˇsen´eho uˇzivatele stejnˇe pokaˇzd´e vyˇzadov´an. V projektu tedy nebude pouˇz´ıv´an v´ ychoz´ı autorizaˇcn´ı atribut, ale jeho upraven´a verze, VinryAuthorizeAttribute. 6.9.1
Workflow
Jedin´e dvˇe ˇca´sti, u kter´ ych se ˇreˇs´ı pˇrechody mezi stavy, jsou objedn´avky a dod´avky. Doch´az´ı zde k jednoduch´emu vˇetven´ı, pˇrechody neobsahuj´ı cykly, tud´ıˇz bylo zvoleno ˇreˇsen´ı s vyuˇzit´ım rozkladov´ ych tabulek, jak jiˇz je naznaˇceno v sekci vˇenovan´e modelu (6.7).
6.9.2
Rozdˇ elen´ı controller˚ u
Kaˇzd´a tˇr´ıda uˇzivatel˚ u pracuje se syst´emem jinak, proto se controllery rozdˇel´ı na obecn´e, jako je ErrorsController nebo BaseController, kter´e zaˇstit’uj´ı obecnou funkcionalitu a na controllery podle rol´ı, kde se ˇreˇs´ı d´ılˇc´ı ˇcinnosti popsan´e v´ yˇse, jako je ProductsController, DeliveriesController atd. 6.9.3
Zabezpeˇ cen´ı pˇ r´ıstupu
Jelikoˇz se poˇc´ıt´a s vyuˇzit´ım vlastn´ıho autorizaˇcn´ıho atributu, je ho moˇzn´e vyuˇz´ıt nejen pro autentizaci, ale i autorizaci. Pokud m´a uˇzivatel jinou roli, neˇz jakou by mˇel m´ıt, bude odhl´aˇsen a pˇresmˇerov´an na str´anku pro nov´e pˇrihl´aˇsen´ı.
6.10
ˇ ızen´ı v´ R´ yvoje
Pro ˇr´ızen´ı v´ yvoje byl zvolen TFS, kter´ y kromˇe spr´avy zdrojov´ ych k´od˚ u umoˇzn ˇuje i ˇr´ızen´ı projektov´eho v´ yvoje. TFS bude nasazen na testovac´ım serveru a poslouˇz´ı
6 N´avrh aplikace ,,virtu´aln´ı sklady“
45
prim´arnˇe pro z´alohov´an´ı a verzov´an´ı projektu. V pˇr´ıpadˇe probl´em˚ u bude moˇzn´e porovn´avat pˇr´ıpadnˇe se vr´atit k libovoln´e verzi. Pˇri kaˇzd´em odes´ıl´an´ı bude vyˇzadov´ano zad´an´ı struˇcn´eho koment´aˇre pro evidenci proveden´ ych zmˇen. Projekt byl rozdˇelen do n´asleduj´ıc´ıch vˇetv´ı: • Dev – v´ yvoj´aˇrsk´a vˇetev, slouˇz´ı pro implementaci nov´ ych funkcionalit. V´ yvoj´aˇr si ji pouˇst´ı lok´alnˇe u sebe. • Test – testovac´ı vˇetev, slouˇz´ı pro opravu nalezen´ ych bug˚ u. Je nasazena v r´amci priv´atn´ı s´ıtˇe a zpˇr´ıstupnˇena tester˚ um. • Release – produkˇcn´ı vˇetev, kde by mˇela b´ yt zajiˇstˇena stabilita a poˇzadovan´a funkcionalita, slouˇz´ı pro opravu hotfix˚ u. Je nasazena v produkˇcn´ım reˇzimu a zpˇr´ıstupnˇena ˇsirok´e veˇrejnosti. Pro hlavn´ı v´ yvoj slouˇz´ı Dev vˇetev, kter´a se po dokonˇcen´ı zmerguje do Test vˇetve a n´aslednˇe nasad´ı a zpˇr´ıstupn´ı tester˚ um. Bˇehem testov´an´ı je moˇzn´e na Dev vˇetvi rozˇsiˇrovat funkcionalitu. Bˇehem testov´an´ı se nalezen´e bugy eviduj´ı v r´amci TFS a jsou opravov´any pˇr´ımo na Test vˇetvi, aby se do testovan´ı verze nezan´aˇsela nov´a funkcionalita z Dev vˇetve a s n´ı pˇr´ıpadn´e nov´e chyby. Veˇsker´e zmˇeny na Test vˇetvi se okamˇzitˇe merguj´ı i zpˇet na Dev vˇetev. Po dokonˇcen´ı testov´an´ı a opravˇe vˇsech nalezen´ ych chyb dojde k zmergov´an´ı s Release vˇetv´ı a zpˇr´ıstupnˇen´ı ˇsirok´e veˇrejnosti. V pˇr´ıpadˇe, ˇze se vyskytne nˇejak´ y akutn´ı probl´em, tak se pˇr´ımo na t´eto vˇetvi provede tzv. hotfix a u ´pravy se n´aslednˇe zmerguj´ı do obou niˇzˇs´ıch verz´ı. Na obr´azku 14 je n´azornˇe naznaˇcen merge mezi vˇetvemi. merge
DEV
merge
Nová funkcionalita
TEST
merge
Oprava bugů
RELEASE Hotfixy
merge merge
Obr´azek 14: Uk´azka mergov´an´ı v r´amci v´ yvojov´ ych vˇetv´ı.
7 Realizace
7
46
Realizace
Tento projekt byl realizov´an na stroji s procesorem Intel Core i7 840QM s 8 GB pamˇeti RAM a 64-bitov´ ym OS Windows 8.1. Pro v´ yvoj byl zvolen programovac´ı jazyk C# s .NET Framework 4.5 a Visual Studio 2012 Ultimate, pˇriˇcemˇz bˇehem v´ yvoje se pˇreˇslo na novˇejˇs´ı verzi 2013. Jako datab´aze byla pouˇzita SQL Server 2008 R2 Express, bˇehem v´ yvoje se na poˇzadavek zadavatele pˇreˇslo na vyˇsˇs´ı verzi SQL Server 2012 Standard. Popis jednotliv´ ych jmenn´ ych prostor˚ u: TT.Vinry.DAL.Code – Jedn´a se o podp˚ urn´e tˇr´ıdy pro kryptov´an´ı hesel a v´ yjimky, kter´e m˚ uˇze tato knihovna produkovat. TT.Vinry.DAL.Model – Obsahuje generovan´ y objektov´ y relaˇcn´ı model datab´aze a dalˇs´ı menˇs´ı modely reprezentuj´ıc´ı nez´avisl´e entity. TT.Vinry.DAL.Repositories – Obsahuje tˇr´ıdy, kter´e poskytuj´ı sluˇzby dalˇs´ım vrstv´am aplikace (prov´ad´ı se zde dotazy na datab´azi a vrac´ı se konkr´etn´ı data). TT.Vinry.Web.Properties – Zde je moˇzn´e nastavit vlastnosti projektu jako takov´eho (pouˇzit´a verze .NET Frameworku, verzov´an´ı, . . . ), d´ale se zde nach´az´ı Resources pro pˇreklady do r˚ uzn´ ych jazyk˚ u, v kter´ ych aplikace pobˇeˇz´ı. uzn´ ych ˇca´st´ı aplikace (naˇcten´ı TT.Vinry.Web.App Start – Tˇr´ıdy pro inicializaci r˚ script˚ u a jejich minimalizace, nastaven´ı pouˇzit´ ych filtr˚ u, mapov´an´ı uri adres, IoC, apod.) TT.Vinry.Web.Content – Um´ıstˇen´ı obr´azk˚ u a CSS. TT.Vinry.Web.Controllers – Controllery s akcemi, zde se ˇreˇs´ı aplikaˇcn´ı logika. TT.Vinry.Web.Extensions – Obsahuje r˚ uzn´e tˇr´ıdy, kter´e pˇrid´avaj´ı podp˚ urnou funkcionalitu. DecimalModelBinder – Upravuje binding pro ˇc´ısla s desetinou ˇca´rkou/teˇckou u modelu, aby byla tolerov´ana jak ˇc´arka, tak teˇcka. HtmlHelpers – Rozˇs´ıˇren´ı Razoru. ImageHelper – Vytv´aˇren´ı n´ahled˚ u obr´azk˚ u. LoggingAttribute – Logov´an´ı akc´ı. SharedAccessors – Sd´ılen´e metody pro plnˇen´ı model˚ u daty (pouˇz´ıv´a se, pokud v´ıce controller˚ u pouˇz´ıv´a v akc´ıch stejn´e modely).
7 Realizace
47
VinryAuthorizeAttribute – Atribut, kter´ y zajiˇst’uje vlastn´ı kontrolu autorizace uˇzivatele pˇri snaze o pˇr´ıstup ke controller˚ um/akc´ım. VinryUser – Reprezentace uˇzivatele syst´em˚ u (uˇzivatel je v souˇcasnosti reprezentov´an ˇsifrovanou cookie). VinryViewEngine – Reprezentuje pˇredpis pro pravidla view engine. TT.Vinry.Web.Layout – Obsahuje prototyp aplikace. TT.Vinry.Web.Models – Obsahuje modely, kter´e reprezentuj´ı data. TT.Vinry.Web.Scripts – Um´ıstˇen´ı javascriptov´ ych soubor˚ u a knihoven. TT.Vinry.Web.Views – Obsahuje jednotliv´e view pro akce controller˚ u. Sloˇzky v tomto jmenn´em prostoru odpov´ıdaj´ı n´azv˚ um controller˚ u a jednotliv´e view odpov´ıdaj´ı jednotliv´ ym akc´ım. D´ale je zde sloˇzka Share, kde se nach´azej´ı sd´ılen´e view, hlavnˇe Layout.cshtml. TT.Vinry.Web.Global.asax – Inicializaˇcn´ı tˇr´ıda aplikace.
7.1
Komplexnˇ ejˇ s´ı ViewModely
Jak jiˇz bylo zm´ınˇeno v´ yˇse, ViewModel tˇr´ıdy reprezentuj´ı data pro samostatn´e view. Struktura tˇechto tˇr´ıd nemus´ı odpov´ıdat tabulk´am v datab´azi, resp. vygenerovan´ ym tˇr´ıd´am, kter´e je reprezentuj´ı. Napˇr. str´anka s detailem produktu potˇrebuje data z tabulek PRODUCT, PRODUCTFILE, PRODUCTDATA, PRODUCTIMAGE a dalˇs´ıch. Ve v´ ypisu 8 je zn´azornˇeno, jak se sestavuje ViewModel pro str´anku s detailem produktu. Nejprve se st´ahne produkt. Pokud nen´ı explicitnˇe uveden jazyk, budou staˇzena data ve v´ ychoz´ım jazyce uˇzivatele. 1 2 3 4 5 6 7 8 9 10 11 12 13 14
try { var var var var
ttProduct = OwnerRepository.GetProduct(VinryUser.IdCompany, id); langs = OwnerRepository.GetLanguages(VinryUser.IdCompany); lang = idLang ?? VinryUser.DefaultLanguageId; ttProductData = ttProduct.TTProductData.FirstOrDefault(m => m.IdLanguage == lang); var productFiles = ttProduct.TTProductFile.Where(m => m.IdLanguage == lang). Select(m => new ProductFileViewModel(m)); if (ttProductData == null) { ttProductData = new TTProductData { IdLanguage = lang }; } var product = new ProductViewModel(ttProduct)
{ ProductData = new ProductDataViewModel(ttProductData), ProductFiles = productFiles, Languages = langs }; return product; } catch (VinryDalException e) { switch (e.ExceptionType) { case VinryDalException.Type.ProductNotFound: TempData[Message] = string.Format("Neexistujici produkt."); break; case VinryDalException.Type.LanguageNotExist: TempData[Message] = string.Format("Neexistujici jazyk."); break; } return null; }
V´ ypis 8: Sestaven´ı ViewModelu pro str´anku detailu produktu.
7.1.1
Vyuˇ zit´ı vygenerovan´ ych model˚ u
Pˇri vytv´aˇren´ı ViewModel˚ u se vyuˇz´ıv´a vygenerovan´ ych modelov´ ych tˇr´ıd, jak je uk´az´ano ve v´ ypisu 9. Prostˇrednictv´ım vlastnost´ı jsou zpˇr´ıstupnˇeny jen poˇzadovan´e hodnoty, s kter´ ymi se ve view m˚ uˇze pracovat. Tento pˇr´ıstup ˇreˇs´ı ˇcasto nepˇrehledn´e pˇred´av´an´ı dat z jednoho modelu do druh´eho na u ´rovni controlleru. Ve v´ ypisu jsou u ´myslnˇe vypuˇstˇeny atributy, aby byl ˇcitelnˇejˇs´ı. 1 public class ProductViewModel : BaseViewModel 2 { 3 private TTProduct _ttProduct; 4 5 public ProductViewModel(TTProduct product) 6 { 7 _ttProduct = product; 8 } 9 10 public int Id 11 { 12 get { return _ttProduct.Id; } 13 set { _ttProduct.Id = value; } 14 } 15 16 public string ProductNumber 17 {
7 Realizace
49
18 get { return _ttProduct.ProductNumber; } 19 set { _ttProduct.ProductNumber = value; } 20 } 21 22 public ProductDataViewModel ProductData { get; set; } 23 24 ... 25 }
V´ ypis 9: Sestaven´ı ViewModelu pro str´anku detailu produktu.
7.2
Chybov´ e str´ anky
Je nˇekolik zp˚ usob˚ u, jak v ASP.NET MVC m˚ uˇze vzniknout chybov´a hl´aˇska, napˇr. pro 404 plat´ı [10]: • Zadan´a URL se nenach´az´ı v routovac´ı tabulce, • pro zadanou URL neexistuje pˇr´ısluˇsn´ y controller nebo akce, • akce vrac´ı HttpNotFoundResult zavol´an´ım metody HttpNotFound(), • akce vyvol´av´a v´ yjimku HttpException s ˇc´ıslem 404, • akce pˇrepisuje vlastnost Response.StatusCode na 404. Zp˚ usob˚ u jak chybu 404 odchytit je mnoho, ale vˇetˇsina z nich nepokr´ yv´a vˇsechny v´ yˇse zm´ınˇen´e pˇr´ıpady. Zachyt´av´an´ı napˇr. pomoc´ı pˇreps´an´ı Application Error metody se odm´ıtalo vykonat pˇri zavol´an´ı HttpNotFound(), protoˇze toto nen´ı povaˇzovan´e za chybu. Jednoduch´e ˇreˇsen´ı funguj´ıc´ı pro vˇsechny pˇr´ıpady je vidˇet ve v´ ypisu 10. Uveden´ y k´od se vykon´av´a v Global.asax. Stejn´ ym zp˚ usobem je ˇreˇseno i odchyt´av´an´ı dalˇs´ıch HTTP stav˚ u. 1 void Application_EndRequest() 2 { 3 if (Context.Response.StatusCode == (int)HttpStatusCode.NotFound) 4 { 5 ... // logov´ an´ ı 6 Response.Clear(); 7 var routeData = new RouteData(); 8 routeData.Values["controller"] = "Errors"; 9 routeData.Values["action"] = "NotFound"; 10 11 IController errorsController = new ErrorsController();
Neˇreˇs´ı se hostname, ale konkr´etn´ı adresa. Bez sloˇzen´ ych z´avorek se jedn´a o konstantn´ı hodnotu, ve sloˇzen´ ych z´avork´ach o promˇenou, kter´a m˚ uˇze b´ yt nastavena jako nepovinn´a. Je nutn´e drˇzet se jist´ ych pravidel, zvl´aˇstˇe u nepovinn´ ych poloˇzek, jinak adresa nemus´ı b´ yt pˇrekl´ad´ana na ,,hezkou url“, ale na url s parametry nebo v horˇs´ım pˇr´ıpadˇe nemus´ı v˚ ubec fungovat. N´azorn´ y pˇr´ıklad z´aznamu pro routov´an´ı:
Pravidlo pro routov´an´ı st´anky s v´ yˇctem produkt˚ u: ProductsList/{idLang}/{sortOrder}/{page}/{search} Pˇr´ıklad adresy (vytvoˇren´e pomoc´ı metody ve v´ ypisu 11): http://www.vinry.eu/ProductsList/en/Weight/3/x12
V´ ypis 11: Vytv´aˇren´ı odkaz˚ u s vyuˇzit´ım Razor engine. Adresy pro pˇrihl´aˇsen´ı r˚ uzn´ ych rol´ı jsou r˚ uzn´e: • Login/{company}, pro vlastn´ıka zboˇz´ı, kde company je n´azev vlastn´ıka zboˇz´ı (subjektu). • LoginStore/{company}, pro skladn´ıka, kde company je n´azev skladu. • LoginAdmin pro pˇrihl´aˇsen´ı spr´avce.
7 Realizace
51
Poˇc´ıt´a se s t´ım, ˇze uˇzivatel m˚ uˇze mˇenit atributy pˇr´ımo v URL, proˇceˇz se pˇri pˇr´ıstupu do datab´aze vˇzdy uv´ad´ı jako parametr ID uˇzivatele, v pˇr´ıpadˇe skladn´ıka i ID jeho skladu, kter´ ym se dotaz vymezuje.
7.4
Vlastn´ı grid
V navrˇzen´em syst´emu je vˇsudypˇr´ıtomn´a pr´ace s tabulkov´ ym v´ ypisem – gridem. Pro potˇreby syst´emu bylo vytvoˇreno rozˇs´ıˇren´ı pro Razor engine, kter´e umoˇzn ˇuje vygenerov´an´ı gridu s podporou str´ankov´an´ı, ˇrazen´ı a vyhled´av´an´ı jen na z´akladˇe zadan´eho ViewModelu. Ve v´ ypisu 12 je vidˇet pˇr´ıklad pro vytvoˇren´ı tabulkov´eho v´ ypisu vˇsech produkt˚ u vlastn´ıka zboˇz´ı. Nejprve se urˇc´ı ViewModel, v tomto pˇr´ıpadˇe ProductListViewModel, s kter´ ym se m´a pˇri generov´an´ı gridu pracovat. D´ale se urˇc´ı akce, kter´a se m´a prov´est pˇri kliknut´ı na ˇrazen´ı a jej´ı parametry. Pot´e se vol´a metoda Columns, kde se pomoc´ı lambda v´ yraz˚ u specifikuj´ı jednotliv´e sloupce a sv´aˇz´ı se s danou vlastnost´ı. Do hlaviˇcky se pouˇzije text ze zobrazovac´ıho atributu dan´e vlastnosti. U kaˇzd´eho sloupce je moˇzn´e urˇcit nˇekolik dalˇs´ıch vlastnost´ı, napˇr. ˇze se jedn´a o odkaz, urˇc´ı se zarovn´an´ı, form´at v´ ypisu, atd. D´ale je vidˇet konstrukce, kter´a dynamicky vytvoˇr´ı sloupce podle z´aznam˚ u v datab´azi – vlastn´ıkovi zboˇz´ı je vytvoˇreno tolik sloupc˚ u, kolik vyuˇz´ıv´a v syst´emu sklad˚ u. Tyto sloupce vypisuj´ı poˇcty kus˚ u produktu v konkr´etn´ıch skladech. Pot´e se pro tabulku urˇc´ı aktu´aln´ı str´anka, zdroj dat, v tomto pˇr´ıpadˇe kolekce obsahuj´ıc´ı ProductListViewModely a zavol´a se samotn´e generov´an´ı. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
V´ ypis 12: Vytvoˇren´ı gridu pro v´ ypis produkt˚ u.
7 Realizace
52
V´ yhodou tohoto ˇreˇsen´ı je univerz´alnost v r´amci cel´eho projektu, variabilita a nez´avislost na pouˇzit´ı javascriptu a AJAX dotaz˚ u.
7.5
Jazykov´ e mutace ukl´ adan´ ych dat
Pro ukl´ad´an´ı informac´ı o produktu byla vytvoˇrena struktura, viz obr´azek 15, kde se ˇreˇs´ı i ukl´ad´an´ı jazykov´ ych mutac´ı. V praxi doch´az´ı k tomu, ˇze pˇri dotazov´an´ı na produkt je vˇzdy specifikov´an jazyk, kter´ y se m´a pouˇz´ıt pro pˇripojen´ı jazykovˇe z´avisl´ ych dat.
Obr´azek 15: Struktura pro ukl´ad´an´ı jazykov´ ych mutac´ı.
7.6
Zabezpeˇ cen´ı (reakce na TOP 10 OWASP)
Pˇri sbˇeru poˇzadavk˚ u na podobu syst´emu byla opakovanˇe zd˚ urazˇ nov´ana bezpeˇcnost. D˚ uvodem je kromˇe jin´eho pr´ace s daty, jejichˇz neopr´avnˇen´a modifikace by mohla zp˚ usobit finanˇcn´ı ztr´atu. Kvalitu zabezpeˇcen´ı webov´eho syst´emu jde jen velmi obt´ıˇznˇe zmˇeˇrit, proto se v r´amci t´eto pr´ace vych´azelo z doporuˇcen´ı mezin´arodn´ı neziskov´e organizace OWASP (Open Web Application Security Project)12 , kter´a se zab´ yv´a zlepˇsov´an´ım bezpeˇcnosti softwaru. V r´amci t´eto organizace vznikl dokument Top 10 popisuj´ıc´ı deset nejkritiˇctˇejˇs´ıch probl´em˚ u dneˇsn´ıch webov´ ych aplikac´ı. Tento dokument poslouˇzil jako standard pro zajiˇstˇen´ı poˇzadovan´e funkcionality.
12
https://www.owasp.org/index.php/Main_Page
7 Realizace
53
Konkr´etn´ı ˇreˇsen´ı jednotliv´ ych probl´em˚ u:
A1-Injection Jako z´akladn´ı ochrana proti napadnut´ı formou SQL injection slouˇz´ı v´ yhradn´ı uˇz´ıv´an´ı Entity Frameworku pro pˇr´ıstup k dat˚ um, kter´ y s´am o sobˇe zajiˇst’uje velmi pokroˇcilou prevenci takov´ ychto u ´tok˚ u. Pˇri psan´ı vlastn´ıch SQL dotaz˚ u se vkl´adan´a data nezad´avaj´ı pˇr´ımo do dotazu, ale prostˇrednictv´ım parametr˚ u (SqlParameter). T´ım je zabezpeˇceno, ˇze nejsou dotazy ˇza´dn´ ym zp˚ usobem upraveny a vykonaj´ı pouze poˇzadovanou akci.
A2-Broken Authentication and Session Management Pro pˇrihl´aˇsen´ı uˇzivatel˚ u se vyuˇz´ıv´a metoda Forms Authentication s vyuˇzit´ım autentizaˇcn´ı cookie. Zprostˇredkov´an´ı autentizace a autorizace se ˇreˇs´ı prostˇrednictv´ım ASP.NET Membership providera a Role providera. Tyto tˇr´ıdy jsou upraveny pro pouˇzit´ı s vlastn´ı datab´az´ı. Hesla se ukl´adaj´ı jako PBKDF2 hashe, kter´e se pˇred kryptov´an´ım sol´ı.
A3-Cross-Site Scripting (XSS) ASP.NET MVC v z´akladu zakazuje pos´ıl´an´ı potenci´alnˇe nebezpeˇcn´eho k´odu ze strany uˇzivatele (HTML znaˇcky, scripty, SQL dotazy atd.). Tato ochrana se d´a explicitnˇe vypnout pro zvolen´e formul´aˇrov´e prvky. U ˇza´dn´eho uˇzivatele toto nikdy nenast´av´a.
A4-Insecure Direct Object References Vˇsechny akce se vˇzdy v´aˇzou na konkr´etn´ıho pˇrihl´aˇsen´eho uˇzivatele, kter´ y se rozliˇsuje pomoc´ı autentizaˇcn´ı cookie. D´ale se u kaˇzd´e akce ˇreˇs´ı autorizace pomoc´ı autorizaˇcn´ıho atributu, kter´ y definuje, jak´e role mohou danou akci vykonat. V pˇr´ıpadˇe nesplnˇen´ı poˇzadavk˚ u je uˇzivatel pˇresmˇerov´an na pˇrihlaˇsovac´ı str´anku.
7 Realizace
54
A5-Security Misconfiguration Vˇsechny v´ yvojov´e vˇetve vyuˇz´ıvaj´ı stejn´ y proces nasazen´ı aplikace. Existuje pouze jeden z´akladn´ı konfiguraˇcn´ı soubor, kter´ y se pro r˚ uzn´e vˇetve modifikuje. Zmˇeny konfiguraˇcn´ıho souboru jsou pro r˚ uzn´e vˇetve minim´aln´ı. Verze jednotliv´ ych souˇc´ast´ı se eviduj´ı jako nuget bal´ıˇcky, ˇc´ımˇz je zajiˇstˇeno, ˇze pˇri pˇrechodu na novˇejˇs´ı verze bude projekt aktualizov´an i na dalˇs´ıch v´ yvojov´ ych vˇetv´ıch.
A6-Sensitive Data Exposure Uˇzivateli se pos´ıl´a minimum citliv´ ych dat, kter´e slouˇz´ı pro jeho autentizaci v r´amci aplikace. Tato data jsou ˇsifrovan´a. Pro komunikaci s produkˇcn´ı verz´ı syst´emu se zakoup´ı certifik´at podepsan´ y d˚ uvˇeryhodnou certifikaˇcn´ı autoritou a pro pˇr´ıstup k syst´emu se bude vyuˇz´ıvat protokolu TLS.
A7-Missing Function Level Access Control Vˇsechny controllery, kter´e pˇristupuj´ı k citliv´ ym dat˚ um jsou opatˇreny autorizaˇcn´ım atributem.
A8-Cross-Site Request Forgery (CSRF) Kaˇzd´ y formul´aˇr je opatˇren unik´atn´ım autorizaˇcn´ım tokenem (AntiForgeryToken), kter´ y se pˇri jeho zpracov´av´an´ı validuje. To sam´e se dˇeje pˇri vol´an´ı akc´ı prostˇrednictv´ım AJAX. [22]
A9-Using Components with Known Vulnerabilities Aplikace vyuˇz´ıv´a nejnovˇejˇs´ıch technologi´ı, kter´e byly v dobˇe jej´ıho v´ yvoje k dispozici. Vˇetˇsina z´akladn´ı funkcionality je ˇreˇsena od z´akladu podle zaveden´ ych praktik a doporuˇcen´ı od zamˇestnavatele.
A10-Unvalidated Redirects and Forwards V pˇr´ıpadˇe, ˇze je aplikaci zad´ano URL jako parametr (napˇr. pˇri pˇrihlaˇsov´an´ı), ovˇeˇr´ı si prvnˇe syt´em, zda se jedn´a o lok´aln´ı adresu pomoc´ı metody IsLocalUrl. Pokud se jedn´a o lok´aln´ı adresu, dojde k pˇresmˇerov´an´ı, v opaˇcn´em pˇr´ıpadˇe je uˇzivatel pˇresmˇerov´an na u ´vodn´ı str´anku.
7 Realizace
7.7
55
Pouˇ zit´ e knihovny
Pˇri v´ yvoji se vyuˇzilo nˇekolika extern´ıch knihoven a n´astroj˚ u, konkr´etnˇe se jedn´a o: • ServiceStack JsonSerializer13 Rozˇs´ıˇren´ı pro snazˇs´ı a l´epe optimalizovanou serializaci dat do JSON. Vyuˇz´ıv´a se kromˇe pr´ace s AJAX dotazy i pro ukl´ad´an´ı dodateˇcn´ ych dat v autorizaˇcn´ı cookie. • Simple Injector14 Pouˇz´ıv´a se pro zpˇr´ıstupnˇen´ı Repository rozhran´ı z projektu TT.Vinry.DAL. Slouˇz´ı k vytvoˇren´ı DbContextu pˇri kaˇzd´em zavol´an´ı str´anky (PerWebRequest) a zprostˇredkov´av´a tak bezpeˇcn´ y pˇr´ıstup k datab´azi. • PagedList15 Vyuˇz´ıv´a se u implementace vlastn´ıho gridu. Znaˇcnˇe usnadˇ nuje tvorbu str´ankov´an´ı. • MVC TreeView Helper16 Rozˇs´ıˇren´ı pro snadn´e vytv´aˇren´ı stromov´ ych struktur. Vyuˇz´ıv´a se u pr´ace s tagy.
Souˇc´ast´ı n´avrhu bylo vytvoˇren´ı nˇekolika uk´azkov´ ych testovac´ıch sc´en´aˇr˚ u, kter´e slouˇz´ı jako podklad pro intern´ı uˇzivatelsk´e testov´an´ı. Kaˇzd´ y sc´en´aˇr obsahuje na zaˇca´tku metodick´e pokyny, aby byl jasn´ y zp˚ usob, jak s n´ım nakl´adat. Pod kaˇzd´ ym pokynem se nach´az´ı m´ısto pro pozn´amku, kterou je vhodn´e pˇri zad´an´ı ,,Ne“ vyplnit. V tabulce 9 je pˇr´ıklad jednoduch´eho testovac´ıho sc´en´aˇre.
8.1
Testov´ an´ı v beta verzi
Jakmile byla implementov´ana veˇsker´a definovan´a funkcionalita, byl produkt nasazen u zadavatele s vyuˇzit´ım VPN (Virtual Private Network) pro omezen´ı pˇr´ıstupu z vnˇejˇsku. Pro testov´an´ı byl vygenerov´an prostˇrednictv´ım CAcert17 testovac´ı certifik´at, kter´ y je vhodn´e pˇridat mezi d˚ uvˇeryhodn´e certifik´aty u vˇsech poˇc´ıtaˇc˚ u, kter´e k aplikaci pˇristupuj´ı. Pokud nen´ı certifik´at pˇrid´an, prohl´ıˇzeˇc m´a snahu uˇzivatele na str´anku nepustit. Do ostr´eho provozu se poˇc´ıt´a s nakoupen´ım certifik´atu podepsan´eho uzn´avanou certifikaˇcn´ı autoritou (CA). Zadavatel mˇel moˇznost si syst´em vyzkouˇset a vyj´adˇrit se k nˇemu.
8.1.1
Konfigurace poˇ c´ıtaˇ ce
Testov´an´ı aplikace probˇehlo na poˇc´ıtaˇci s n´asleduj´ıc´ı konfigurac´ı. Konfigurace se liˇs´ı od t´e uveden´e ve specifikaci poˇzadavk˚ u, jelikoˇz v pr˚ ubˇehu v´ yvoje byl testovac´ı stroj aktualizov´an: • Procesor: Intel Xeon CPU 3,0GHz • Pamˇ et RAM: 9 GB • Operaˇ cn´ı syst´ em: Windows Server 2012 Standard • Webov´ y server: Internet Information Services (IIS) 8.0 • Datab´ aze: SQL Server 2012 Standard • Pevn´ y disk: 500 GB 17
http://www.cacert.org
8 Testov´an´ı
57
Test zmˇ ena nastaven´ı (vlastn´ık zboˇ z´ı) Kliknut´ım na z´aloˇzku Nastaven´ı“ v horn´ı ˇca´sti obrazovky se ” zobraz´ı str´anka s osobn´ımi u ´daji o pˇrihl´aˇsen´em uˇzivateli.
Ano / Ne
Na kartˇe Editovat m˚ uj profil“ lze upravovat nastaven´ı ” uˇzivatele.
Po zmˇenˇe hesla kliknˇete na tlaˇc´ıtko ,,Odhl´asit“ v horn´ı ˇc´asti obrazovky. Zobraz´ı se str´anka pro pˇrihl´aˇsen´ı, zadejte nov´e pˇrihlaˇsovac´ı u ´daje. Podaˇrilo se v´am pˇrihl´asit se?
Ano / Ne
Editovat m˚ uj profil – je moˇzn´e zmˇenit v´ ychoz´ı nastaven´ı jazyka a zmˇena se ihned projevuje.
Ano / Ne
Editovat m˚ uj profil – je moˇzn´e zmˇenit poˇcet z´aznam˚ u na str´anku a zmˇena se v tabulk´ach projevuje.
Ano / Ne
Editovat m˚ uj profil – pole oznaˇcen´a hvˇezdiˇckou jsou povinn´a. Bez nich nelze formul´aˇr odeslat.
Ano / Ne
Na kartˇe M˚ uj subjekt“ lze upravovat nastaven´ı cel´eho ” subjektu.
Ano / Ne
M˚ uj subjekt – lze pˇrid´avat/odeb´ırat uˇzivatele subjektu (kromˇe vaˇseho u ´ˇctu).
Ano / Ne
M˚ uj subjekt – pˇri vytv´aˇren´ı nov´eho u ´ˇctu s jiˇz existuj´ıc´ım uˇzivatelsk´ ym jm´enem jste byl upozornˇen na nutnost zadat unik´atn´ı jm´eno.
Ano / Ne
M˚ uj subjekt – je moˇzn´e zmˇenit ˇc´ıslo u ´ˇctu.
Ano / Ne
M˚ uj subjekt – je moˇzn´e zmˇenit pˇrednastavenou hodnotu DPH.
Ano / Ne
M˚ uj subjekt – pole oznaˇcen´a hvˇezdiˇckou jsou povinn´a. Bez nich nelze formul´aˇr odeslat.
Ano / Ne
Zkuste odeslat formul´aˇr bez vyplnˇen´ı povinn´ ych u ´daj˚ u. Formul´aˇr se nepovedlo odeslat a povinn´e u ´daje byly zv´ yraznˇeny – je tomu tak?
Pˇri v´ yvoji se simulovalo znaˇcn´e zaplnˇen´ı datab´aze cyklick´ ym nahr´av´an´ım produkt˚ u, ˇra´dovˇe sta tis´ıce produkt˚ u, aby se ovˇeˇrila jej´ı rychlost pˇri tabulkov´em v´ ypisu, ˇrazen´ı a vyhled´av´an´ı. Zpomalen´ı nebylo pouh´ ym okem patrn´e, jednalo se ˇra´dovˇe o zlomek sekundy.
8.2.1
Zpˇ etn´ a vazba
Pro evidov´an´ı zpˇetn´e vazby poslouˇzil soubor form´atu Excel, kde se zaznamen´avaly veˇsker´e pˇripom´ınky. Tento soubor zadavatel sd´ılel prostˇrednictv´ım online sluˇzby Office 365. Pro vˇetˇs´ı pˇrehlednost a sv´az´an´ı s projektem se u ´koly a bugy pr˚ ubˇeˇznˇe pˇrepisovaly do TFS, jak bylo navrˇzeno v sekci 6.10. V´ yhodou takov´eho ˇreˇsen´ı byla i moˇznost sv´az´an´ı veˇsker´ ych zas´ılan´ ych u ´prav s konkr´etn´ımi u ´koly/bugy. Uk´azka zaznamenan´e zpˇetn´e vazby v TFS je vidˇet na obr´azku 16.
Obr´azek 16: V´ ypis u ´kol˚ u a bug˚ u po nasazen´ı do testovac´ıho provozu (TFS).
9 Z´avˇer
9
59
Z´ avˇ er
C´ılem t´eto pr´ace bylo vytvoˇrit webov´ y syst´em pro spr´avu virtu´aln´ıch sklad˚ u urˇcen´ y z´akazn´ık˚ um v r´amci Evropsk´e Unie, kter´ y by poskytoval jednotn´e prostˇred´ı pro pr´aci se sklady v r˚ uzn´ ych zem´ıch a jazyc´ıch. Samotn´e realizaci pˇredch´azelo sezn´amen´ı se s ˇr´ızen´ım dodavatelsk´eho ˇretˇezce a e-logistikou, konkr´etnˇe s outsourcingem skladov´ ych prostor. N´asledovalo pˇredstaven´ı aktu´aln´ıch trend˚ u v oblasti tvorby webov´ ych aplikac´ı a porovn´an´ı jednotliv´ ych technologi´ı. D´ale doˇslo k sezn´amen´ı se s firmou zadavatele a definov´an´ı konkr´etn´ı funkcionality poˇzadovan´eho syst´emu od vize aˇz po specifikaci konkr´etn´ıch poˇzadavk˚ u. Pro potˇreby zadavatele bylo provedeno z´akladn´ı porovn´an´ı moˇznost´ı nasazen´ı koneˇcn´eho produktu. Po vytvoˇren´ı specifikace poˇzadavk˚ u byly analyzov´any konkr´etn´ı moˇznosti v´ yvoje vˇcetnˇe vzhledu s ohledem na zvolenou technologii ASP.NET MVC. Z´aroveˇ n bylo vytvoˇreno nˇekolik uˇzivatelsk´ ych testovac´ıch sc´en´aˇr˚ u. Na z´akladˇe pˇredchoz´ıch poznatk˚ u se realizovala aplikace, jej´ıˇz funkcionalita se pr˚ ubˇeˇznˇe prezentovala zadavateli. Pro spr´avu verz´ı zdrojov´ ych k´od˚ u se vyuˇzilo n´astroje TFS. Po dokonˇcen´ı pr´ace byl v´ ysledn´ y syst´em zprovoznˇen v testovac´ım reˇzimu, aby si ho mohl zadavatel osobnˇe vyzkouˇset a poskytnout zpˇetnou vazbu. Do TFS bylo zaevidov´ano nˇekolik postˇreh˚ u pro dalˇs´ı rozvoj aplikace. Souˇca´st´ı pr´ace nen´ı samotn´ y pˇreklad do r˚ uzn´ ych jazyk˚ u, je pouze poskytnuta jednoduch´a struktura, kde je moˇzn´e pˇreklady zadat. Pr´ace ve v´ ysledku splˇ nuje poˇzadavky, kter´e jsou uvedeny na jej´ım zaˇca´tku, pˇrestoˇze jej´ı tvorba trvala d´ele, neˇz se p˚ uvodnˇe pˇredpokl´adalo.
Ostatn´ı zdroje
60
Pouˇ zit´ a literatura [1] KOCH, Richard. The 80/20 principle: the secret of achieving more with less. Reprint. London: N. Brealey, 1998. ISBN 18-578-8167-2. [2] LAMBERT, Douglas. Logistika: [pˇr´ıkladov´e studie, ˇr´ızen´ı z´asob, pˇreprava a skladov´an´ı, balen´ı zboˇz´ı]. 1. vyd. Praha: Computer Press, 2000, 589 s. ISBN 80-722-6221-1. ˇ Radek. Metodika implementace e-logistiky ve vertik´aln´ıch dis[3] KYPSON, tribuˇcn´ıch ˇretˇezc´ıch se zamˇeˇren´ım na firmy menˇs´ı a stˇredn´ı velikosti. 1. vyd. Brno: VUTIUM, 2002. 33 s. ISBN 80-214-2143-6. Zkr´acen´a verze PhD Thesis. Vysok´e uˇcen´ı technick´e v Brnˇe. ˇ´ICEK. ˇ [6] BASL, Josef a Roman BLAZ Podnikov´e informaˇcn´ı syst´emy: podnik v informaˇcn´ı spoleˇcnosti. 3., aktualiz. a dopl. vyd. Praha: Grada, 2012, 323 s. ISBN 978-80-247-4307-3. [10] FREEMAN, Adam. Pro ASP.NET MVC 4. 4. vyd. Berkeley, Calif: Apress, 2012. ISBN 978-143-0242-369. [12] TIWARI, Shashank C. Professional nosql. 1st ed. Indianapolis, IN: Wiley Pubishing, Inc., 2011, p. cm. ISBN 04-709-4224-X. [18] AGEL, Christian, Morgan SKINNER, Karli WATSON, Jay GLYNN a Bill EVJEN. C# 2008: programujeme profesion´alnˇe. Vyd. 2. Brno: Computer Press, 2013, 1904 s. ISBN 978-80-251-2401-7. ˇ Jindˇrich a Ludmila KALUZOV ˇ ´ Modelov´an´ı dat v informaˇcn´ıch [20] KALUZA, A. syst´emech. 1. vyd. Praha: Ekopress, 2012, 125 s. ISBN 978-80-86929-81-1. [21] CONOLLY, Thomas, Carolyn E BEGG a Richard HOLOWCZAK. Mistrovstv´ı – datab´aze: profesion´aln´ı pr˚ uvodce tvorbou efektivn´ıch datab´az´ı. Vyd. 1. Brno: Computer Press, 2009, 584 s. ISBN 978-80-251-2328-7.
Ostatn´ı zdroje [4] BUXBAUM, P. A. Digital Logistics –Value Creation in the Freight Transport Industry, Eyefortransport Conference, Las Vegas, Kvˇeten, 2001. ˇ [5] KRIZKO, Ivo. SCM: Supply Chain Management. In: SystemOnLine [online]. 2002 [cit. 2014-04-11]. Dostupn´e z: http://www.systemonline.cz/clanky/ scm-supply-chain-management.htm
Ostatn´ı zdroje
61
´ [7] ZAHALKA, Ludˇek a Rostislav SCHWOB. Warehouse management. SystemOnLine: Ekonomick´e a informaˇcn´ı syst´emy v praxi [online]. 9/2009 [cit. 2014-03-13]. Dostupn´e z: http://www.systemonline.cz/erp/ warehouse-management.htm [8] Usage of server-side programming languages for websites. W3Techs [online]. 2014 [cit. 2014-04-11]. Dostupn´e z: http://w3techs.com/technologies/ overview/programming_language/all [9] ESPOSITO, Dino. Exploring ASP.NET 4.0—Web Forms and Beyond. [online]. [cit. 2014-04-21]. Dostupn´e z: http://msdn.microsoft.com/en-us/ magazine/ee431529.aspx [11] Market Share. MySQL [online]. 2008 [cit. 2014-04-28]. Dostupn´e z: http: //www.mysql.com/why-mysql/marketshare [13] KUCINSKAS, Darius. Entity Framework 6 vs NHibernate 4. In: Devbridge Group [online]. 2014 [cit. 2014-04-18]. Dostupn´e z: http://www.devbridge. com/articles/entity-framework-6-vs-nhibernate-4 [14] ADO.NET and LINQ to SQL. Microsoft Developer Network [online]. 2013 [cit. 2014-03-06]. Dostupn´e z: http://msdn.microsoft.com/cs-cz/ library/bb386944(v=vs.110).aspx [15] JAVOREK, Jan. CSS preprocesory: m´enˇe psan´ı, vyˇsˇs´ı efektivita. In: Zdroj´ak.cz [online]. 2011 [cit. 2014-04-21]. Dostupn´e z: http://www.zdrojak. cz/clanky/css-preprocesory-mene-psani-vyssi-efektivita ´ [16] MICHALEK, Martin. K ˇcemu je dobr´ y Bootstrap a frontend frameworky?. In: Zdroj´ak.cz [online]. 2013 [cit. 2014-04-21]. Dostupn´e z: http://www.zdrojak. cz/clanky/k-cemu-je-dobry-bootstrap-frontend-frameworky [17] ANDERSON, Rick. Bundling and Minification. In: ASP.NET [online]. 2012 [cit. 2014-04-26]. Dostupn´e z: http://www.asp.net/mvc/tutorials/mvc-4/ bundling-and-minification [19] SHEKHAWAT, Sandeep Singh. CRUD using the Repository Pattern in MVC. In: C# Corner [online]. 2013 [cit. 2014-04-28]. Dostupn´e z: http://www.c-sharpcorner.com/UploadFile/3d39b4/ crud-using-the-repository-pattern-in-mvc [22] WASSON, Mike. Preventing Cross-Site Request Forgery (CSRF) Attacks. In: ASP.NET [online]. 2012 [cit. 2014-05-01]. Dostupn´e z: http://www.asp.net/web-api/overview/security/ preventing-cross-site-request-forgery-(csrf)-attacks
Ostatn´ı zdroje
Seznam zkratek Akronymy pouˇzit´e v tomto dokumentu:
AJAX
Asynchronous JavaScript and XML
API
Application Programming Interface
ASP
Active Server Pages
CA
Certification Authority
CRUD
Create, read, update and delete
CSS
Cascading Style Sheets
DAL
Data Access Layer
DBMS
Database Management System
ERP
Enterprise Resource Planning
GUI
Graphical User Interface
IIS
Internet Information Services
IoC/DI
Inversion of Control/Dependency Injection
Java EE Java Platform, Enterprise Edition JSP
JavaServer Pages
MIT
Massachusetts Institute of Technology
MVC
Model-Ciew-Controller
NoSQL
Not Only SQL
ORM
Object-Relational Mapping
OWASP Open Web Application Security Project RDBMS Relational Database Management System REST
Representational State Transfer
RIA
Rich Internet Application
SCM
Supply Chain Management
62
Ostatn´ı zdroje
SCOR
Supply Chain Operation Model
SOAP
Simple Object Access Protocol
SQL
Structured Query Language
SVN
Apache Subversion
TFS
Team Foundation Server
TMS
Transportation Management System
VPN
Virtual Private Network
VPS
Virtual Private Server
WCF
Windows Communication Foundation
WF
Windows Workflow Foundation
WMS
Warehouse Management System
WPF
Windows Presentation Foundation
WSDL
Web Services Description Language
63
A Struˇcn´a uˇzivatelsk´a pˇr´ıruˇcka
A
64
Struˇ cn´ a uˇ zivatelsk´ a pˇ r´ıruˇ cka
Aplikace ,,Virtu´ aln´ı sklady“ Pro bˇeh aplikace je nutn´e nejprve na SQL Serveru vytvoˇrit pˇr´ısluˇsnou datab´azi. K tomu slouˇz´ı pˇriloˇzen´ y SQL dump script, viz D, sloˇzka Aplikace. Pot´e se mus´ı upravit v souboru web.config informace o pouˇzit´e datab´azi – ta se eviduje jako z´aznam nazvan´ y connectionString. Pro bˇeh webov´e aplikace je potˇreba IIS Express 7 nebo novˇejˇs´ı. Pˇr´ıpadn´e nastaven´ı certifik´atu se ˇreˇs´ı na u ´rovni aplikaˇcn´ıho serveru IIS. Po spuˇstˇen´ı pˇrejdˇete na str´anku http://hostname:port/LoginAdmin, mˇela by se v´am objevit pˇrihlaˇsovac´ı obrazovka, viz obr´azek 17. V´ ychoz´ı pˇrihlaˇsovac´ı u ´daje administr´atora syst´emu jsou: • Login: spravce • Heslo: Spravce Tyto u ´daje je moˇzn´e editovat v souboru web.config.
Obr´azek 17: Pˇrihlaˇsovac´ı str´anka. Po pˇrihl´aˇsen´ı je moˇzn´e editovat ˇc´ıseln´ıky v datab´azi a vytvoˇrit tak pˇr´ısluˇsn´e jazyky, sklady, skladn´ıky a vlastn´ıky zboˇz´ı. Adresa pro pˇrihl´aˇsen´ı skladn´ık˚ u je http://hostname:port/LoginStore/{company} a vlastn´ık˚ u zboˇz´ı http://hostname:port/Login/{company}. Ovl´ad´an´ı je jednoduch´e a intuitivn´ı – moˇznosti jednotliv´ ych uˇzivatel˚ u jsou pops´any v sekc´ıch 6.3, 6.4 a 6.5.
B ERA model datab´aze
B
ERA model datab´ aze
Obr´azek 18: Navrˇzen´a struktura datab´aze.
65
C Graf z´avislost´ı z´akladn´ıch jmenn´ ych prostor˚ u
C
66
Graf z´ avislost´ı z´ akladn´ıch jmenn´ ych prostor˚ u
Obr´azek 19: Graf z´avislost´ı jmenn´ ych prostor˚ u.
D Obsah CD
D
67
Obsah CD
Pˇr´ılohou tohoto dokumentu je i CD, kter´e m´a n´asleduj´ıc´ı strukturu:
• Aplikace – TT.Vinry ∗ ∗ ∗ ∗
Obsahuje projekt (solution) ve Visual Studiu 2013. Souˇc´ast´ı solution jsou vˇsechny tˇri ˇc´asti zm´ınˇen´e v sekci 6.6. Pro sv˚ uj bˇeh vyˇzaduje IIS Express 7 nebo novˇejˇs´ı. Je nutn´e upravit web.config pro pˇripojen´ı k datab´azi.
– Obsahuje script.sql pro vytvoˇren´ı sch´ema datab´aze. • Dokumenty – obsahuje dokument dokument specifikace poˇzadavk˚ u Specifikace pozadavku.docx. – obsahuje text diplomov´e pr´ace DIP.pdf. – Zdroj ∗ Obsahuje zdrojov´e k´ody pro diplomovou pr´aci ve form´atu Lyx 2.0.6. ∗ Obsahuje obr´azky pouˇzit´e v tomto dokumentu.