diplomski rad - university of novi sad rad marko blazic.pdf · tema: razvoj višeslojne web...
TRANSCRIPT
Univerzitet u Novom Sadu
Tehnički fakultet “Mihajlo Pupin”
Zrenjanin
Diplomski rad
Tema: Razvoj višeslojne web aplikacije uz primenu
servisno-orijentisane arhitekture
Development of n-tier web application with use of
service-oriented architecture
Mentor: Student:
doc. dr Ljubica Kazi Marko Blažić IT 90/15
Zrenjanin, 2017.
Diplomski rad
2
Sadržaj
1. UVOD 3
2. TEORIJSKE OSNOVE 4
2.1. Web aplikacije 4
2.2. Višeslojne aplikacije 8
2.3. Servisno-orijentisane arhitekture SOA 13
2.4. Web servisi 16
2.5. SOAP I RESTfull 17
2.6. Web Hosting 20
3. ANALIZA SEMANTIČKE OBLASTI 21
3.1. Elektronsko poslovanje 21
3.2. Sportska oprema 23
4. POSTOJEĆA REŠENJA 25
4.1. Tehnološki primer -javno dostupni web servis 25
4.2. Semantički primer – online prodaja sportske opreme 27
5. OPIS KORIŠĆENE TEHNOLOGIJE 30
6. REALIZOVAN PRIMER 34
6.1. Specifikacija zahteva 34
6.2. Modeli opšteg dizajna softvera 36
6.3. Modeli implementiranog rešenja višeslojne arhitekture softvera 41
6.4. Korisničko uputstvo 46
6.5. Opis implementacije 53
6.5.1 Plan višeslojne arhitekture za implementaciju softvera 53
6.5.2 SQL skript i šeme baze podataka 54
6.5.3 Ključni delovi koda sa objašnjenjem 56
7. ZAKLJUČAK 73
8. Literatura 74
Diplomski rad
3
1.Uvod
Savremeni razvoj softvera uključuje u velikoj meri razvoj web aplikacija različitih namena.
Danas je uobičajeno da se celokupan softver ne razvija u jednoj firmi, već se neki delovi
aplikacije koriste od strane drugih proizvođača i kao moduli – dinamičke biblioteke ili servisi
uključuju u nekom delu u funkcionisanje osnovne aplikacije. Jedan od motiva za izbor teme
ovog diplomskog rada je upravo teorijsko i praktično izučavanje problematike modularnog
razvoja web aplikacija kroz primenu servisno-orjentisane arhitekture.
Prilikom izrade diplomkog rada izrađena je aplikacija namenjena online prodaji fitness opreme.
Motivacija za izbor semantičke oblasti ovog diplomskog rada je veliki problem današnjice, a to
je veliki nedostatak vremena. Danas ljudi mnogo rade i jednostavno nemaju vremena da idu od
prodavnice do prodavnice da bi kupovali stvari. Ova aplikacija, kao i mnoge druge aplikacije
ovog tipa trebale bi da olakšaju korisniku da dođe do željenog proizvoda putem internet prodaje.
Glavni problem prilikom izrade ove aplikacije je bilo upoznavanje sa potrebnim funkcijama
same aplikacije i načinom implementacije. Posebno je važno analizirati profile korisnika i
funkcionalne mogućnosti u okviru svakog profila. Takođe problem je i definisati specifikaciju
zahteva i ispuniti sva očekivanja potencijalnih korisnika, uz ograničen vremenski period
realizacije softvera. Kroz ovaj rad ćemo pokušati da se upoznamo sa problemima koji su vezani
za razvoj višeslojnih aplikacija, kao što je ova, kao i prednosti i nedostatke njihovog korišćenja.
Diplomski rad se sastoji iz teorijskog istraživanja problematike razvoja web aplikacija, višeslojne
arhitekture i servisno-orijentisane arhitekture. Praktičan primer koji ilustruje primenu navedenih
koncepata realizovan je na primeru on-line prodavnice fitness opreme, pri čemu se konsultuje,
putem web servisa, dobavljač opreme kako bi u svakom trenutku on-line prodavnica imala
ažurne spiskove robe sa cenama. Na ovaj način se ilustruje primena web servisa.
Diplomski rad
4
2. Teorijsko-tehnološke osnove
2.1. Web aplikacije
Web aplikacije predstavljaju računarske programe koji koriste web pretraživače u kombinaciji sa
web tehnologijama kako bi izvršili zadatke koji su im zadati putem interneta[8]. Danas mnogi
poslovi koriste internet kao oblik komunikacije prilikom svog izvršavanja. Internet omogućava
bržu razmenu informacija sa njihovim klijentima i zaposlenima sve u cilju osigruravanja posla.
Naravno da bi ovo angažovanje od strane korisnika i zaposlenih urodilo plodom mora se
omogućiti skladištenje svih podataka koji su potrebni, zatim te podatke obraditi i prezentovati ih
kao odgovor stranama.
Web aplikacije primenjuju kombinaciju server skripti kao što je ASP ili PHP kako bi se
omogućilo skladištenje primljenih podataka i obrada istih, i klijent skripte poput HTML-a i
JavaScripta, zavisi koji programski jezik se koristi, sve u cilju prezentovanja primljenih
informacija korisnicima[8]. Ova kombinacija skripti omogućava korisnicima da budu u stalnoj
komunikaciji sa zaposlenima u firmi putem online foruma, određenih menadžment sistema preko
kojih mogu da razmenjuju sadržaje. Primer razmene sadržaja bile bi korpe za naručivanje koje
predstavljaju jedan vid razmene informacija. Jedna veoma bitna stvar koja se ističe kod primene
web aplikacija i samog poslovanja preko interneta jeste ta što aplikacije pored toga što
omogućavaju kanale komunikacije, takođe daju mogućnost zaposlenima da kreiraju razna
dokumenta, dele informacije između sebe, da učestvuju zaje dnički na određenim projektima a
sve to bez obzira gde se u tom trenutku nalaze.
Slika 1.- Prikaz komunikacije web aplikacije i klijenta[8]
Diplomski rad
5
Web aplikacije su obično kodirane u jeziku koji je podržan od strane internet pretraživača kao
što je HTML, ukoliko koristimo programski jezik C# (u našem slučaju) ili JavaScript. Ovi jezici
se oslanjaju na pretraživač da će program biti ispravan. Neke aplikacije su dinamičke i one
zahtevaju konstantnu komunikaciju sa serverom kako bi im se definisao izgled. Postoje druge
statičke aplikacije i njihov izgled je definisan već prilikom prve izrade.
U koliko želimo da naša web aplikacija funcioniše kako treba ona mora da sadrži sledeće
servere:
1. Web server da bi primila zahtev od strane korisnika,
2. Aplikacioni server da bi izvršavala zahteve koji su podneti i
3. Bazu podataka kako bi se sačuvali i preuzeli potrebni podaci radi izvršenja zahteva
Raspon koji raspolaže aplikacioni server ide od ASP:NET, ASP I COLDFUSION-a do PHP i
JSP.
Slika 2.- Prikaz toka komunikacije kroz servere[9]
Način na koji se odvija komunikacija između servera u aplikaciji:
Korisnik šalje zahtev web serveru putem interneta preko interfejsa naše aplikacije ili preko
pretraživača,
Web server taj zahtev šalje odgovarajućom aplikacionom serveru,
Aplikacioni server izvršava zahtev, to može da se ostvari preko upita baze podataka ili prvo
obrada informacija pa tek onda se dobijaju rezultati podataka koji su zatraženi,
Aplikacioni server zatim šalje povratnu informaciju web serveru sa informacijom koja je tražena
ili obrađenim podatkom,
Web server odgovara klijentu na zahtev tako što mu prikazuje informacije ili podatke koje je
klijent tražio, putem interfejsa.
Diplomski rad
6
Proces razvoja softverskih proizvoda, pa tako i Web aplikacija je skup metoda, aktivnosti, prakse
i automatizovanih alata koje programeri koriste za razvoj i održavanje sistema i softvera. Postoje
dve osnovne vrste metodologija razvoja softvera, a to su[11]:
1. Tradicionalne metode razvoja softvera,
2. Agilne metodologije razvoja softvera.
Kad su u pitanju tradicionalne metodologije one se zasnivaju na upravljanju ljudima. Sastoje se
prvenstveno iz skupa tehnika za predviđanje, planiranje i kontrolu aktivnosti kako bi se dobio
željeni cilj. Pre početka razvoja softvera prvo se definiše skup pravila koja se strogo poštuju,
vreme koje će biti potrebno da se kreira dat softver kao i predviđanje troškova koji će biti
potrebni da bi se aplikacija kreirala na najefikasniji način[11]. Na početku definišemo zadatak
projekta. U ovoj metodi plan je temelj same tehnogolije i mora biti prvi izrađen. Nakon ovog
koraka se počinje sa izvršavanjem aplikacije. Prilikom izrade aplikacije je potrebno nadgledati
da li se sve odvija po predviđenom planu. Poslednji korak je završavanje aplikacije. Na taj način
se pokazuje da je celokupni plan izvršen u potpunosti. Za tradicionalni pristup mora se reći da je
vrlo disciplinovan pristup i da su sve faze životnog ciklusa predvidljive. Prilikom korišćenja ove
metodologije, da bi se prešlo sa jedne faze na sledeću obavezno prethodna faza mora biti
izvršena. Najpopularnija tradicionalna metoda je metoda Vodopada.
Slika 3.- Metod Vodopada[11]
Agilne metodologije za razvoj softvera, nastale su devedesetih godina prošlog veka. Kod njih je
postupak izrade dinamičan ali je neophodan usklađen timski rad. Termin agilan je nastao kao
najverniji opis njegove osnovne karakteristike, a to je veoma izražena fleksibilnost odnosno
agilnost kad su u pitanju promene kod zahteva korisnika[12]. Ovu metodologiju definištu 12
principa i 4 pretpostavke. Principi kojima se agilnost vodi su sledeći: vizuelna kontrola, lokacija
članova tima, razvoj vođen testovima, kontrola prilagođavanja, razvoj vođen zadacima, liderstvo
i saradnja, prihod ispred cene.
Diplomski rad
7
Primer agilne tehnologije je Ekstremno programiranje. Ova metodologija se vodi principom da je
klijent član tima koji radi na datoj metodologiji. Ekstremno programiranje definiše sve svoje
ciljeve koje je potrebno ostvariti u celine ali se konstantno izvršava interakcija sa ostalim
članovima tima. Jedan od razloga zašto je sve podeljeno u celine je taj što celine prestavljaju
smernicu na nešto što će se implementirati, a uspeh se meri putem razvoja. Na jednoj celini bi
trebalo da rade dva programera, tester i programer kako bi se nakon završetka svake celine kod
mogao testirati. Poželjno je da se članovi tima međusobno menjaju kako bi se poboljšala
kohezija između svih članova tima.
Slika 4.- Ekstremno programiranje[12]
Diplomski rad
8
2.2 Višeslojne aplikacije
Strogo definisani zahtevi prilikom izrade web aplikacije su od strogog značaja za uspeh
realizacije date aplikacije. Dobro definisana arhitektura može nam pomoći da naš sistem
zadovolji korisnikove potrebe na polju dizajna, performansi, pouzdanosti itd. Slobodno možemo
reći da arhitektura našeg sistema, se može predstaviti kao “most” između zahteva i njihovih
implementacija. Zadatak arhitekture je deskriptivan opis našeg sistema čime se neke osobine
sistema ističu dok druge pokušavaju da se prekriju. Sa razvojem aplikacija razvijaju se i same
arhitekture, a samim tim može se i videti da ključan element u izradi aplikacija jeste odabir prave
arhitekture.
Softverska arhitektura bi se mogla definisati kao struktura koja sadrži kopmonente, konekcije,
ograničenja i njihovih obrazloženja. Komponente mogu biti manji delovi poput nekog
programskog koda ili veći delovi kao što su sistemi za upravljanje bazom podataka. U sklopu
same arhitetkure potrebno je definistati i njene interfejse kao i njihovo ponašanje koje je
predviđeno od strane programera.Višeslojna arhitektura se može podeliti u :
1. Jednoslojna arhitektura
2. Dvoslojna arhitetkura
3. Troslojna arhitetkura
4. SOA
Nastanak jednoslojne arhitekture se vezuje za proces automatizacije posla, početak unosa
centralnih računara kojima su mogli da pristupe veći broj korisnika istovremeno. Komunikacija u
ovoj tehnologiji, obavljala se preko “glupih” terminal, a sva obrada podataka se izvršavala od
stane centralnog računara. Veliki nedostatak ove arhitetkure se ogleda upravo u komunikaciji
između terminala i server. Server prati koji se terminal prati prilikom pritiska tastera, obrađuje
datu informaciju i šalje adekvatan odgovor. Ovu arhitetkuru je nasledila dvoslojna arhitetkura
zbog dva problema koju su se javljali korišćenjem ove arhitetkure a to su: nemogućnost
korišćenja istog koda više puta kao i nemogućnost izmene samo jednog dela koda.
Slika 5.- Jednoslojna arhitektura[25]
Diplomski rad
9
Dvoslojna arhitektura je softverska arhitektura u kojoj je prezentacioni sloj ili interfejs prikazan
na klijentu dok je sloj za rad sa bazom podataka skladišten na server. Odvajanjem ove dve
komponente na dva različita mesta dobija dvoslojnu arhitekturu. Dodavanjem dodatnih slojeva
dobijamo multi-slojnu arhitekturu.
Autori često porede ovaj tip arhitekture sa troslojnom arhitekturom zato sto pored ova dva
navedena sloja troslojna jos sadrži i business layer koji se tačno nalazi između ova dva layera.
Ovakvom podelom aplikacije dobija se na njenoj skalabilnosti odnosno performansama, takođe
uklanja se svaka mogućnost da se počini greška koja bi mogla da se desi ukoliko bi se višeslojna
arhitektura koristila u dvoslojnoj arhitkturi. Nedostatak koji poseduje ovaj tip arhitekture je
netolerantnija na naglo povećanje korisnika gde bi se mnogo više vremena utrošilo na
upravljanje procesima nego na rešavanje zahteva[25].
Slika 6.- Dvoslojna arhitektura[27]
Troslojna arhitektura je nastala evolucijom dvoslojne arhitekture kako bi se prevazišli nedostaci
koje je imala dvoslojna. Aplikacije su podeljene u tri nivoa koja su međusobno labavo povezana
i koja međusobno komuniciraju putem interfejsa koje poseduju[26]. Prvi sloj je sloj koji je u
komunikaciji sa korisnikom odnosno prezentacioni sloj. On sadrži interfejs aplikacije preko
kojeg korisnik unosi zaheve za određenim informacijma ili podacima. Drugi sloj je sloj poslovne
logike, sadrži poslovnu logiku sistema. Klase sa popustima i drugim matematičkim algoritmima
se nalaze unutar ovog sloja. Treći sloj je sloj sa pristupom bazi podataka i unutar njega se nalaze
svi quiry i SQL upiti kojima se rešava komunikacija sa bazom podataka. Troslojna arhitetkura
koristi server apikacije kao posrednik između klijenta računara i server baze podataka.
Tehnologije koje koristi troslojna arhitetkura su SQL, MySQL, ORACLE, XML, web servisi itd.
Diplomski rad
10
Slika 7.- Trosloja arhitektura[27]
Slika 8.- Prikaz svih slojeva višeslojne arhitekture[28]
Diplomski rad
11
Prezentacioni sloj je prvi sloj sa kojim korisnik dolazi u dodir i to je sloj koji obrađuje podatke
unete od strane korisnika i šalje ih sloju servisa koji dalje stupa u komunikaciju sa ostalim
slojevima. Prezentacioni sloj se nadovezuje na već postojeći srednji deo aplikacije i
funkcionisanje web aplikacije bez ovog sloja ne bi bilo moguće[27]. Podelom aplikacije u
podslojeve dobija se na fleksibilnosti aplikacije i njenim performansama. Ovo se može lepo
videti prilikom izmene jednog dela koda unutar jednog sloja, proces koji će mnogo biti olakšan
zbog slabe međusobne povezanosti. Prezentacioni sloj se sastoji iz dve komponente:
1. Prezentaciona logika
2. Korisnički interfejs
Prezentaciona logika je jedna od komponenta prezentacione logike i njen zadatak je obrada
informacija koja se šalje aplikaciji od strane korisnika i njihovo prosleđivanje do srednjeg sloja
aplikacije. Zadatak korisničkog interfejsa je prikaz interfejsa korisnicima kao i prikaz odgovora
koji je dobijen od strane srednjeg sloja.
Sledeći sloj višeslojne aplikacije je sloj servisa koji se nalazi između prezentacionog sloja i sloja
poslovne logike. Zadatak ovog sloja je da omogućava komunikaciju između prezentacionog sloja
i sloja poslovne logike, obrada podataka kao i vraćanje rezultata između ova dva sloja.
Sloj posovlne logike je sloj koji je zadužen za obradu svih pristiglih informacija od sloja servisa.
Ovaj sloj sadrži svu poslovnu logiku kao i algoritme koji se koriste prilikom izvršavanja
korisničkih zahteva. Sloj poslovne logike se može razložiti na[27]:
1. Objektni model koji modeluje učesnike u poslovnom procesu
2. Poslovna pravila koja predstavljaju klijentsku politiku i zahteve
3. Servise koji implementiraju autonomne funkcionalnosti
4. Proces rada – definiše kako se vrši prenos podataka iz jednog modula u drugi
Poslednji sloj aplikacije je sloj sa pristupom podacima, njegov zadatak je komunikacija sa bazom
podataka i slanje rezultata poslovnom sloju. Komunikacija sa bazom podataka se izvršava preko
niza upita, procedura, query itd.
Slika 9.- Prikaz slojeva višeslojne aplikacije i njihova povezanost[27]
Diplomski rad
12
MVC patern funkcioniše na principu dodele zadataka objektima: Model, Controller i View.
Pored dodele zadataka ovaj patern takođe definiše način na koji će komponente komunicirati.
Svaki od navedenih objekata je odvojen od objekta drugog tipa apstraktnih interfejsa, preko kojih
uspostavljaju međusobnu komunikaciju.
Slika 10.- MVC patern[6]
Korisnik preko web pretraživača gde se nalazi interfejs naše aplikacije, unosi zahtev za podacima
koji su mu potrebni. Podaci se zatim prosleđuju do Controllera koji sada prosleđuje zahtev do
modela unutar kojih se nalaze podaci koje korisnik želi. Model zato putem niza poruka vraća
odgovor u vidu informacija do Controllera koji sada ima zadatak da prosledi ove informacije do
odgovarajućeg pogleda. U ovom procesu od navedena 3 elementa jedino je View pasivan i nema
nikakvu samostalnu ulogu, nego prikazuje samo ono što mu je prosledio Controller.
Diplomski rad
13
2.3. Servisno-orijentisane arhitekture SOA
S razvojem današnje tehnologije od kompanija koje se bave proizvodnjom web aplikacija,
očekuje se što veća kreativnost i kompentivnost ali pre svega da aplikacije bude u što većoj meri
fleksibilne, odnosno da se mogu menjati u skladu sa uslovima koji su postavljeni kako od strane
korisnika tako i samog tržišta. Ispunjenje datih zahteva i očekivanja u velikom broju zavisi od
fleksibilnosti date aplikacije, njena mogućnost da se menja u skladu sa zahtevima koji se nalažu,
a da pritom bude operativna[2]. Kompanijama je u interesu da koriste ono što već imaju u svom
posedu, odnosno resurse koji su im u tom trenutku na raspolaganju da se do željene promene
dođe brzo, jer vreme je novac a svaka kompanija želi da bude operativna u svakom trenutku.
Servisno orijetnisana arhitektura se najjednostavnije može opisati kao arhitetkura koja podržava
izmenu već postojećeg okruženja u skup međusobno povezanih servisa koji međusobno
komuniciraju na određenom nivou kako bi se izvršili zadaci koji su zadati[4]. Bitno je
napomenuti da su oni međusobno labavo povezani i da svaki sloj date arhitekture ima pristup
drugom sloju samo na minimalnom nivou kako bi protok informacija bio najbolji[2]. Razlog
zašto je arhitetkura podeljena je jednostavan, kad bi bili jako povezani svaki posao bi se radio
dva ili više puta. Na ovaj način je regulisano da se to ne dešava i sama arhitetkura je mnogo
preglednija i mnogo pristupačnija.
Slika 11.- Prikaz SOA arhitekture i njenih slojeva [2]
Diplomski rad
14
Slika broj 11.- prikazuje SOA arhitekturu i njene slojeve. SOA sloj se sastoji iz 4 bitna sloja koji
se mogu izdvojiti i koje sam koristio prilikom izrade ove aplikacije. SOA slojevi su:
1. Sloj sa pristupom bazi podataka,
2. Sloj modela,
3. Web Servise sloj,
4. Sloj prezentacije.
Sloj za pristup bazi podataka je sloj koji omogućava pojednostavljen pristup bazi podataka.
Unutar ovog sloja se nalaze folderi sa klasama u kojima se nalaze SQL upiti preko kojih
aplikacija komunicira sa bazom podataka, odnosno preko kojih se kreiraju nove, izmenjuju već
postojeći podaci ili brišu oni koji više nisu potrebni. Takođe imamo opciju izlistavanja svih
podataka koji se nalaze u datoj tabeli koju je korisnik tražio.
Sloj modela je sloj unutar kojeg se nalaze klase koje su ispunjene objektima. Objekti imaju get i
set funckiju uz pomoć koje preuzimaju vrednost ili je postavljaju u model. Ovaj sloj je u
komunikaciji sa korisnikom.
Sloj Web servisa je sloj dosta složeniji od prethodnih. Sastoji se iz 4 segmenta:
1. Segment Poruka- u segmetnu poruka se nalaze sve poruke koje se šalju prilikom zahteva i
koje se vraćaju kao odgovor same aplikacije,
2. Segment Mappera- segment koji služi za transformaciju zahteva u odgovore
3. Segment Abstraction- segment abstraktnih klasa, predstavlja interfejs ovog sloja
Slika 12.- Web Service sloj[3]
4. Segment Implementation- segment u kojem se implementuju svi zahtevi i odgovori.
Diplomski rad
15
Poslednji sloj ove arhitekture je prezentacioni sloj, odnosno sloj koji korisnik vidi kada koristi
našu aplikaciju.U ovom sloju se nalaze dva veoma bitna segmenta a to su Controller i View
(pogled). Controller je zadužen za primanje zahetava od korisnika koji stižu putem browsera, a
zatim da šalje zahteve do modela. Model odgova na zahteve pomoću određenih informacija i
šalje ih nazad Controlleru koji sada informacije koje je dobio šalje View (pogledu). Zato se ovaj
patern naziva MVC (MODEL-VIEW-CONTROLLER). Bitno je još napomenuti da je View
passivan i da on samo prikazuje informacije koje mu Controller prosledi.
Slika 13.- MVC patern[3]
Diplomski rad
16
2.4 Web servisi
Web servis je aplikacija smeštena na nekom računaru odnosno serveru koja ima za zadatak da
podrži interakciju između dva računara na mreži i omogući razmenu informacija. Servisi mogu
biti privatni ali i javno dostupni.
Prednosti web servisa u odnosu na web aplikaciju je u tome što se manje troše resursi ali takođe
se i manje opterećuje sama mreža, a ovo je posledica toga što web aplikacije pored standardnog
odgovora moraju da šalju i HTML formu sa opisom kako bi odgovor trebao da izgleda. Web
servisi su više zastupljeniji na manjim uređajima kao što su telefoni.
Web servisi mogu da sarađuju sa GUI aplikacijom pa se dobija kombinacija desktop i web
aplikacije gde svako od njih daje svoj doprinos. Web aplikacija joj omogućava funkcionalnost
dok joj desktop forme daju izgled odnosno interfejs. Bitno je napomenuti da se komunikacija
između ova dva dela ostavaruje JSON ili XML formatom i da je ovakva aplikacija mnogo
fleksibilnija od web aplikacije jer sam korisnik može da je prilagodi svom desktopu.
Slika 14.- Web servis[8]
Diplomski rad
17
2.5 SOAP i RESTfull
ASMX nam daje mogućnost kreiranja web servisa radi slanja poruka koristeći SOAP platformu.
SOAP platforma nije zavisna od jezika koji koristimo prilikom izrade našeg web servisa.
Prednost ove platforme je u tome što korisnik ne mora da ima nikakvo znanje o objektnom
modelu, programskom jeziku ili samoj platformi. Korisnik treba da razume princip slanja i
primanja SOAP poruka.
Kad je u pitanju sama podloga SOAP, ona je akronim od Simpe Object Access Protocola i
zasnovana je na XML protokolu za razmenu informacija između računara. SOAP poruka u XML
dokumentu sadrži sledeće elemente[6]:
Root element koji se zove Envelope, i koji služi kao identifikacija XML dokumenta
Header koji nije obavezan ali ukoliko postoji sadrži određene informacije koje mogu da
pomognu u procesu autentifikacije. Ukoliko postoji Header on mora da bude prvi element
u Envelope
Body element koji je obavezan i u kojem se nalazi sadržaj poruke za primaoca
Fault element koji takođe nije obavezan a čije je funkcija da nađe grešku u porukama,
ukoliko postoji predstavlja podelement Body elementa.
SOAP može da funkcioniše na mnoge transportne protokole poput TCP, SMTP, UDP i
HTTP[15]. Za razliku od SOAP, ASMX servis može da funkcioniše samo na HTTP protokolu.
Za opis ovih WSDL koji je napisan XML-om i sadrži informacije o protokolu koji ćemo korisiti i
adresi našeg web servera[16]. SOAP daje mogućnost da se komunicira između aplikacija čak i
ukoliko one nisu napisane istim programskim jezikom. SOAP se smatra naslednikom XML-RPC
protokola, dok je jedina razlika to što ima drugračiji izled i struktura samih poruka.
Oblasti u kojima je poželjno koristiti SOAP su:
Kad se postigne dogovor oko “Dogovorenog formata”, što znači da su se obe strane
dogovorile koji format će koristiti za pisanje poruka,
Kod operacija koje koriste stanje,
Slika 15.- SOAP
Diplomski rad
18
Web servis koji se ističe pored SOAP je RESTful, koji je danas mnogo dominantniji od SOAP i
WSDL jer je mnogo jednostavniji za korišćenje. Podaci se prebacuju u JSON format ali takođe
podržava i XML i YAML[16]. RESTful je po arhitekturi zanovan na REST-u pa je zbog toga
jednostavan i vrlo fleksibilan jer se izvršava na bilo kom klijentu sa podrškom HTTP/HTTPS.
Ovi servisi imaju URL koji omogućava njihovu identifikaciju. Svaka akcija koja se izvede u
ovom servisu jednaka je jednom pozivu dok pristup do resursa je definisan HTTP-om. Prilikom
izvršavanja akcije koristi se URL ali se razlikuje HTTP od same operacije. REST koristi CRUD
sa operacijama kao što su Create, Read, Update, Delete. RESTfull je pogodan za korišćenje u
sledećim situacijama[6]:
Kod ograničenog propusnog opsega
Kod operacija koje ne koriste stanja
Kod situacija kod kojih je moguće keširanje
Prednosti REST servisa:
1. Jednostavnost
2. Fleksibilnost formata vraćenih podataka
3. Koristi postojeću mrežnu strukturu
4. Brzo se uči REST servis tehnika
Slika 16.- RESTful[16]
Diplomski rad
19
SOAP REST
Protok baziran na XML porukama Koristi se stil arhitekte
Koristi WSDL za komunikaciju između
korisnika i provajdera
Koristi XML ili JSON za slanje poruka i
primanje poruka
Pozivanje servisa od strane RPC metode Jednostavno pozivanje metoda putem URL
puta
Ne vraća čitljivi rezultat Rezultat je čitljiv preko XML i JSON
Transfer se obavlja preko HTTP, SMTP, FTP Transfer je isključivo HTTP
JavaScript može da pozove SOAP, ali je teško
implementirati
Jednostavno pozivanje kroz JavaScript
Performanse nisu sjajne u poređenju sa REST Performanse su mnogo bolje u poređenju sa
SOAP, manje CPU se koristi
Slika 17.- Poređenje SOAP i REST servisa [17]
Diplomski rad
20
2.6 Web hosting
Kad je u pitanju implementacija web aplikacija, ključni element korišćenja je hosting podrška
realizovanom softveru. Kad je u pitanju Web hosting za njega se može reći da predstavlja prostor
na internetu na kojem se nalazi naš web sajt. Web host vrši funkciju hostinga na našem web
serveru ili serveru web provajdera. Elementi koje možemo hostovati su sajtovi, forumi, različiti
portali itd., međutim preduslov za to je da računar koji hostuje naš sajt sve vreme bude
konektovan na internet[14]. Hosting funkcioniše tako što kad uđemo na forum ili određeni web
sajt, naš računar se konektuje na web server koji je host datog sajta.
Da bi smo posedovali i održavali jedan ili više web sajtova potrebno nam je pored jake tehničke
opreme dobar hosting, stoga mnoge firme prilikom odabira hostinga koriste nekog od internet
provajdera. Web hosting provajderi su firme koje poseduju jaku tehničku podršku u kombinaciji
sa potrebnim tehničkim obrazovanjem u cilju što bolje usluge korisnicima. Oni u svom posedu
imaju web servere koje izdaju klijentima koji žele da hostuju svoje stranice putem internet
mreže.
Slika 18.- Web hosting[]
Diplomski rad
21
3.Analiza semantičke oblasti
3.1 Elektronsko poslovanje
Elektronsko poslovanje bi se najlakše moglo opisati kao obavljanje poslova putem interneta. Pod
pojmom obavljanja poslova ne mislimo samo na kupovinu i prodaju, nego i na samu organizaciju
posla i poslovanje jedne firme , organizovanje komunikacije kako među zaposlenima tako i
između firme i klijenata, i to sve putem interneta. Ovaj izraz je prvi put upotrebljen od strane
IBM-a da bi se naglasila upotreba savremenih tehnologija. Da bi mogli da uspostavljamo
elektronsko poslovanje, moramo da primenjujemo elektronske tehnologije. Primenjivanje
elektronske tehnologije znači da firme koje koriste ove tehnologije u svom poslovanju imaju
mnogo efikasniji učinak. Ovakav način poslovanja donosi dosta pozitivnih stvari a jedna od njih
je smanjenje troškova na minimum. S obzirom na činjenicu da ne mora da se putuje na svaki
sastanak pogotovo ako su u pitanju inostrani partneri dolazi do velikih novčanih ušteda kao i do
uštede vremena jer mogu da se održe internet koferencije. Veoma je bitno u svakom poslu biti
savremen i pratiti trendove, jer se time dobija prednost na tržištu.
Slika 19.- Prikaz savremenog website-a
Diplomski rad
22
Elektronska trgovina (Electronic Commerce) ili E-trgovina je proces uspostavljanja
komunikacije sa klijentima i prenos proizvoda i usluga koju zahtevaju klijenti preko mreže
računara, kao prenos novčanih dobara preko digitalne komunikacije. Pored ovih funkcija
uklučuju se funkcije kao što su finansije, marketing, prodaja koje su neophodne da bi se izvršio
proces trgovine. Na ovaj način možemo da pokažemo razliku između e-trgovine i e-poslovanja.
E-trgovina bi bila samo jedan mali deo e-poslovanja pored elektronske berze, mobilnog
poslovanja, elektronskog bankarstva itd.
Kupovina preko interneta je obično najbrži vid kupovine ali i najjeftiniji, zato se sve veći broj
ljudi okreće kupovini proizvoda putem internet mreže. Kupovina je moguća u bilo kom
vremenskom periodu, nije ograničena na određenu zemlju ili region i ukoliko ste prodavac ne
zakupljujete prostor. To je veoma velika prednost jer vaš proizvod može da vidi i neko ko je
hiljadama kilometara daleko od vas. Treba napomenuti da svaki proizvod i sama prodaja ima
svoje tržište. Sa pojavom e-trgovine došlo je i do pojave novog tržišta “Online” tržišta.
Prednosti poslovanja preko interneta:
Nema skupih nekretnina
Neophodna je minimalna radna snaga
Mogućnost poslovanja sa ljudima širom sveta
Veoma brzo prilagođavanje u cenama i zahtevima kupaca
Postoji katalog koji pruža informacije korisnicima
Nedostaci poslovanja preko interneta:
Kupovina preko interneta zahteva poverenje (obostrano)
Mnogi potencijalni kupci ne koriste internet kupovinu
Problem stvarnog postojanja prodavaca na internetu
Ugrožena privatnost
Bezbednost poslovne transakcije
Slika 20.- Kupovina putem e-trgovina
Diplomski rad
23
3.2 Sportska oprema
Sport je jedna od glavnih manifestacija života. Sport se proteže kroz sve sfere obrazovanja, i
sastavni je deo života svakog čoveka kako zbog zrdravlja tako i zbog zabave[7]. Sport je postao
sredstvo ličnog i opšteg razvoja. Smatra se da je sport postao svetski jezik kojim se izkazuje
poštovanje, fair-play kao i priznavanje različitosti kod drugih osoba.
Ideja o sportu javila se još u Antičkoj Grčkoj gde su fizičke aktivnosti imale velik značaj. Fizičke
aktivnosti su bile sastavni deo tadašnjeg obrazovanja[7]. Još tada se uvidela potreba da se čovek
pored mentalnog nivoa razvija i na fizičkom nivou. Poznata Juvelova poslovica kaže: ”U
zdravom telu zdrav duh”[7]. Sa razvojem fizičkih aktivnosti javila se potreba za ravojem
određene opreme kako bi se dobio što lepši doživljaj prilikom učestvovanja a takođe i da bi se
smanjio rizik od povreda. Košarka, fudbal i ostali sportovi sa loptom su se prvobitno igrali sa
predmetima koji su bili dosta teški i nepravilnog oblika što je u velikoj meri otežavalo igru.
Samim tim javlja se potreba da se ovo unapredi i igra postane čist užitak. Ostali sportovi gde se
iskazivala muška snaga su takođe imali opremu koja se koristila. Ovde možemo navesti sportove
poput bacanja koplja, kugle, rvanja, boksa, podizanje kilaže itd. Svi ovi sportovi pored svoje
lepote su nosili određene rizike. Upravo iz ovih razloga oprema se razvijala kako bi se povećao
stepen sigurnosti i na taj način dobili smo opremu kao što je poznajemo danas.
Uspešnost svakog posla koji obavljamo pored spoljnih faktora zavisi i od opreme koju koristimo.
Za opremu bi se moglo reći da je to alat koji nam pomaže da postignemo što bolje rezultate i
svedemo rizik od povreda na minimum. U zavisnosti od sporta kojim se bavimo razlikuje se i
oprema koju koristimo. Pored ovoga na naše rezultate utiče i sam kvalitet opreme, stoga sportski
stručnjaci se slažu da je za maksimalan učinak potrebno pažljivo odabrati opremu koja odgovara
našim telesnim performansama i koja zadovoljava određeni kvalitet. Kad je u pitanju fitness tu se
ubrajaju svi sportovi koji za svoje izvođenje koriste neki vid kilaže. Kako bi se potiglo što veće
opterećenje potrebno je razviti tehniku za datu vežbu ili sport. Kad sportista dođe do svojih
granica tu nastupa funckija opreme. U tim sitnim vremenskim periodima gde sportista jedino
razmišlja o podizanju zadate kilaže, oprema se ističe kao zaštitnik njegovog tela. Koliko će ta
zaštita biti pouzdana zavisi od kvaliteta marke i brenda same marke. Za fitness bitno je odabrati
dobre patike, kao deo sportske opreme jer je veoma bitna stabilnost i udobnost same obuće, bitno
je odabrati sportsku uniformu koja najviše odgovara našem telu i pored ovoga još dodatnu
opremu u zavisnosti od oblasti fintessa kojom se bavimo. U koliko je u pitanju powerlifting
moramo pažljivo odabrati kaiš koji nas štiti od povrede leđa, steznike za zglobove ruku i kolena
koja štite zglobove da ne dođe do pucanja prilikom podizanja velikih kilaža itd.
Diplomski rad
25
4.Postojeća rešenja
4.1 Tehnološki primer -javno dostupni web servis
Konkretan primer web servisa (SOAP) koji je javno dostupan za korišćenje putem URL-a:
http://www.webservicex.net/globalweather.asmx
Programski kod koji opisuje način razmene podataka putem SOAP poruku za request i respond a
zatim i programski kod koji opisuje razmenu podataka putem HTTP protokola za request i
respond.
POST /globalweather.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: http://www.webserviceX.NET/GetCitiesByCountry
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetCitiesByCountry xmlns="http://www.webserviceX.NET">
<CountryName>string</CountryName>
</GetCitiesByCountry>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
Diplomski rad
26
<GetCitiesByCountryResponse xmlns="http://www.webserviceX.NET">
<GetCitiesByCountryResult>string</GetCitiesByCountryResult>
</GetCitiesByCountryResponse>
</soap:Body>
</soap:Envelope>
Slika 23. Prikaz koda za request and resonse poruke[28]
GET /globalweather.asmx/GetCitiesByCountry?CountryName=string HTTP/1.1
Host: www.webservicex.net
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET">string</string>
Slika 24.- Prikaz koda za HTTP GET metodu, request i response[28]
POST /globalweather.asmx/GetCitiesByCountry HTTP/1.1
Host: www.webservicex.net
Content-Type: application/x-www-form-urlencoded
Content-Length: length
CountryName=string
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET">string</string>
Slika 25.- Prikaz koda za HTTP POST metodu, requst i reponse[28]
Diplomski rad
27
4.2 Semantički primer – online prodaja sportske opreme
Konkretan primer web site-a koji se bavi online trgovinom sportske opreme.
https://www.pansport.rs/
Slika 26.- Prikaz početne stranice PanSport web site-a
Navedeni primer je realizovani web site firme PanSport. Navedeni sajt ima stavke glavnog
menija kao što su:
Proizvodi- deo menija u kojem su prikazani svi proizvodi kategorisani po markama
proizvoda kao i po njihovoj nameni,
Forumi- dostupni svim ulogovanim korisnicima gde je moguće postaviti bilo kakva
pitanja ili komentare vezane za proizvod, opremu ili trening,
O nama- Mesto gde se nalaze sve najbitnije informacije koje je potrebno znati u vezi
PanSport-a, poput partnera, osvojenih nagrada itd,
Kontakt- mesto gde su ostavljene informacije kako je moguće stuputi u kontakt sa
PanSport-om putem email adrese, telefona itd,
Prodavnice- dat je detaljan opis filijala PanSporta na području Srbije,
Tekstoteka- mesto gde možemo pročitati savete koji su dali stručna lista u vezi ishrane,
treninga, i često postavljenih pitanja,
Fitness Centri- ovde možemo registrovati svoj fitness cetnar ukoliko želimo, takođe
možemo da pretražimo sve poznatije fitness centre u Srbiji.
Diplomski rad
28
http://www.proteini.si/rs/
Slika 27.- Prikaz početne stranice Proteini.si web site-a
U navedenom primeru je prikazan web site prodavnice Proteini.si. Na početnoj strani se nalaze
stavke menija poput:
Kategorije- mesto gde možemo pretražiti željeni proizvod po marci, nameni,
upotrebi itd,
Namera- mesto gde možemo pretraživati proizvode isključivo po njihovoj
nameni,
Proizvođači- mesto gde pretražujemo proizvode po proivođaču,
Sportovi- mesto gde opsiani sportovi, oprema i suplementacija koja se koristi pre
ili u toku treninga,
Top 50- mesto gde možemo videti koji su najprodavaniji proizvodi, koji su
nabolji itd.,
Kontakt- search bar koji nam daje mogućnost da pretražimo određenu osobu,
Tu su i opcije poput videa- gde možemo videti pravilno izvođenje formi nekih
vežbi, novosti iz sveta fitnessa, akcija itd.
Diplomski rad
29
http://www.goldsgym.com/get-started/
Slika 28.- Prikaz Gold Gym web site-a
Navedeni primer je realizacija web site-a Gold Gym-a, najpoznatijeg lanca teretana na svetu,
poznati jos kao “The Mecca”. U navedenom primeru možemo videti sledeće opcija web site-a:
Get started-mesto web site na koje možemo stupiti u kontakt sa osobljem putem interneta,
Why Gold’s gym- mesto gde su nam dati razlozi zašto da odaberemo baš njih,
Locate a gym- deo web site-a koji nam pomaže da pronađemo najbližu Gold gym
teretanu u našoj okolini,
Find a class- možemo da pronađemo tip treninga koji nas interesuje poput mixed martial
arts, studio cycle itd.,
Our personal treinres- mesto gde nam je dat opis i specifikacije trenera zaposlenih u
datim teretanama,
Strength exchange- mesto gde sve navedene funkcije možemo naći zajedno u cilju
dobijanja kompletne slike datog site-a,
Diplomski rad
30
5.Opis primenjene tehnologije
U diplomskom radu korišćen je program Microsoft Visual Studio 2015, dok je jezik na kojem je
aplikacija pisana C#. Pored ovoga bitno je napomenuti da se koristi i SQL server database 2015
koji omogućava rad sa bazama podataka.
Microsoft Visual Studio predstavlja okruženje koje je razvila firma Microsoft, koristi se za
izradu programa kao što su web sajtovi, web servisi, mobilne aplikacije ali takođe i desktop
aplikacije. Visual Studio koristi platforme kao što su Windows API, Forme, Store itd.
Visual Studio takođe uključuje i code editor kao i debbuger. Debugger se koristi na dva nivoa:
kao source debugger i machine debbuger. Pored ovoga u sastav Visuala se takođe može uključiti
i code profiler, form designer koji nam omogućava izradu GUI aplikacija, web designer, class
designer itd.
Visaul Studio daje podršku za 36 programskih jezika kao i code editor i debbuger. Poznati jezici
koji se mogu koristiti su C, C++, C#, VB.NET, PYTHON, RUBY, JAVA, HTML/CSS,
JAVASCRIPT itd.
Slika 29.- Prikaz prozora Home Controllera u MS Visual Studio 2015
Diplomski rad
31
.NET
Visual studio.Net prestavlja jedno od okruženja koje je proizvela firma Microsoft. Sadrži veliku
biblioteku klasa (Framework Class Library). Prva značajnija verzija .Net-a potiče iz 2000. a u
saradnji sa Intel-om i HP-om su radili na standardizaciji CLI kako bi se više programskih jezika
koristili na različitim platformama.
Programi se izvršavaju kroz CLR, virtuelnu mašinu koja sadrži: memory menagment, exception
handling, garbage collector itd[19]. Korišćenjem .Net dobijamo platformu na kojoj možemo da
pišemo na 35 različitih jezika od kojih su najpoznatiji C, C#, C++ i Java.
Svaki jezik ima svoj kompajler posebno i preko njega se kompajlira u CLI. U zavisnosti od toga
koji je jezik korišćen CLR kompajlira CLI u mašinski kod, kod koji je poznat računaru. Ovo je
glavni alat i alat koji odvaja Visual Studio od drugih.
MVC
MVC ili Model-View-Controller je patern koji je kreiran sa zadatkom da reši problem kod
većine aplikacija a to je prikazivanje podataka korisniku. Ideja je bila da se sama aplikacija
podeli u 3 sloja: Model, View i Controller. Ovaj patern bi trebao da funkcioniše na jedan od dva
sledeća mišljenja:
Aplikacija bi trebala da dobije zahtev od korisnika preko web pretraživača. Controller dobija tu
poruku i zatim se obraća modelu za podatke koji su mu potrebni da bi se ispunio zahtev. Model
kao odgovor šalje podatke nazad Controlleru koji sada date podatke prosleđuje View koji je
statičan i njegova funkicija je prikazivanje prosleđenih podataka korisniku. Da bi sve ovo
funkcionisalo potrebni su nizovi poruka, mappera, interfejsa, upita za bazu itd.
Drugo mišljenje je po svemu slično prvom, razlika je u tome što se smatra da podaci ne moraju
da se kreću preko Controllera nego može da se uspostavi direktna veza između Modela i View
gde View ne bi imao nikakvu sopstvenu funkciju, već bio bi samo posrednik[20].
Slika 30.- MVC[21]
Diplomski rad
32
ASP.NET
Asp.net predstavlja open-scource framework za web aplikacije koji sluzi za pravljenje
dinamičnih web stranica. Proizveden je od strane MicroSoft-a i pomoću njega pored web
aplikacije, možemo da pravimo web servise, web sajtove, mobilne aplikacije i slično.
Prva verzija je izašla na tržište januara 2002. godine sa verzijom 1.1 . NET Frameworka.
ASP(Active Server Pages) je izgrađen na bazi CLR koji omogućava programerima da koriste
bilo koji vid podrške od strane .Net-a. SOAP ekstenzija daje mogućnost programerima da u
sklopu ASP pišu SOAP poruke.
ASP.NET je naslednik ASP.Core, odnosno predstavlja implementaciju web frameworka u
kombinaciji sa više različitih frameworka poput EntiryFrameworka-a. Novonastali ASP:NET
koristi open-scource platformu :NET Compiler Platform (“Roslyn“) i paterne kao što su
ASP:NET MVC, ASP:NET ASP.NET Web Pages.
Slika 31.- ASP.NET[22]
Diplomski rad
33
Web Service
Web servis je servis koji nam daje mogućnost da preko računara komuniciramo sa drugim
računarnom, putem interneta. HTTP je prvenstveno dizajniran kako bi se koristio u komunikaciji
između čoveka i računara, prerađen je i može da se koristi u sporazumevanju dva računara ili
specifičnije služi za prenos podataka koji su razumljivi računarima poput XML ili JSON. U
praksi to bi se mogli objasniti tako što ima interfejs servera baze podataka kojem se pristupa
putem nekog web servisa ili aplikacije kako bi se dobio korisnički interfejs za krajnjeg korisnika.
Slika 32. Prikaz prozora za kreiranje web servisa u MS Visual Studio 2015
Diplomski rad
34
6. Realizovan primer
6.1 Specifikacija zahteva
Specifikacija zahteva za izradu online aplikacija predstavlja skup aktivnosti koje može da izvrši
korisnik ili administrator web aplikacije. U nastavku ćemo prikazati tabelarno na primeru
ONLINE PRODAVNICE FITNESS OPREME. Tabelarni prikaz je odabran radi boljeg prikaza
svih aktivnosti. Spisak specifikacija aktivnosti kupca:
POSLOVNA AKTIVNOST PLAN SOFTVERSKE PODRŠKE
Izbor proizvoda Korisniku je data mogućnost pregleda proizvoda prilikom
ulaska na sajt, zatim korisnik ima opciju odabira da li želi da
kupi dati proizvod ili pogleda dodatne informacije
Kupovina proizvoda Korisnik klikom na korpu dodaje dati proizvod u korpu,
zatim dobija dve opcija da li želi da nastavi kupovinu ili
doda još neki proizvod u korpu. Ukoliko odabere opciju
nastavi, kupac je u obavezi da unese lične podatke, dostavnu
službu kao i kod za popust
Prikaz dodatnih osobina
proizvoda
Klikom na ovu stavku, korisniku se prikazuje dodatne
informacije datog proizvoda
Prikaz lista sprava Prikazuje se lista sa spravama koju korisnik može da kupi ili
da pogleda njihove specifikacije, slično kao i za opremu
Kupovina sprava Klikom na ovo dugme korisnik ima mogućnost da doda
sprave u korpu, a zatim bira da li će da nastavi sa
kupovinom ili da završi porudžbinu
Prikaz primera ishrane Izlistava se prikaz primera obroka koji sportisti mogu da
koriste u zavisnost koji tip treniga rade.
Logovanje Korisnik ima mogućnost da se uloguje i time dobija dodatne
povlastice
Kreiranje naloga Korisnik ima mogućnost kreiranja sopstvenog naloga
Tabela 1.- Prikaz mogućnosti korisnika
Diplomski rad
35
Spisak specifikacija aktivnosti administratora:
Aktivnost Detalji poslovne aktivnosti
Unos opreme Poslodavac ili administrator je u mogućnosti
da unosi novu opremu kao i izmena i brisanje
postejeće, i njeno prikazivanje na web site
Unos marke Poslodavac ima mogućnost da unese marku za
datu opremu i spravu
Unos tipa marke Poslodavac ima mogućnost da unese tip marke
za opremu i spravu kao i tip ishrane koje nudi
kao primer da bi korisnici mogli lakše da
shvate koji tip ishrane je vezan za koji trening
Unos sprava Mogućnost unosa novih sprava kao i izmena i
brisanje postojećih
Unos ishrane Mogućnost unosa ishrane sa opisom date
ishrane i načinom pripreme, kao i koji tip
predstavlja data ishrana
Unos naloga korisnika Administrator ima mogučnost kreiranja novog
naloga korisnika ukoliko korisnik ne zna, kao i
dodeljivanje statusa korisnika ili administratora
Izmena postojećih korisnika Administrator dobija mogućnost izmene
postojećih naloga kao i brisanja
Tabela 2.- Prikaz mogućnosti administratora
Diplomski rad
36
6.2 Modeli opšteg dizajna softvera
6.2.1 Model poslovnih procesa
Model poslovnih procesa služi za kreiranje i upravljanje svim poslovnim procesima unutar jedne
organizacije. BPM( Business Process Modeling) ima zadatak da objedini sve procese unutar
organizacije radi lakšeg prikaza organizacije.
Slika 33.- Prikaz BMP modela[28]
Diplomski rad
37
Slika 34.- Prikaz BMP modela na primeru jedne prodavnice[28]
6.2.2 Use case dijagram
U use case dijagramu su prikazani procesi is BPM modela kao i njhove funkcije. U narednoj
tabeli (preuzeto iz [28]) su podrzani softverskim funkcijama samo primitivni procesi koji se
odnose na prodavca i kupca, a deo dobavljača nije podržan jer taj deo pripada informacionom
sistemu dobavljača i izvan je domena rada. Procesi su podeljeni u dva nivoa prioriteta, prvi nivo
koji direktno podržava procese i drugi koji prestavlja proširenje datog procesa. Sledeća kolona je
kolona preduslova koja mora biti ispunjenja ukoliko želimo da koristimo funkcije softvera.
Poslednja kolona se odnosi na tip softvera koji plasiramo.
Diplomski rad
38
Primitivni
poslovni
proces
Radna
uloga
izvršioca
primitivnog
poslovnog
procesa
Softverska funkcija
Preduslov
za uspešno
izvršavanje
funkcija i
prioriteta
Actor
(Profil
korisnika
softverske
funkcije)
Tip
softvera
1.prioriteta 2.prioriteta
Prijem robe Prodavac Unos podataka
o primljenoj
robi
Tabelarni
prikaz
podataka
dospele robe,
Filter
podataka
prema
datumu
dospele robe,
parametarska
štampa
Unos
narudžbenice
za
dobavljača
Dobavljač c/s
LAN,
WEB
Kreiranje
kataloga
Prodavac Unos
proizvoda za
katalog,
Štampanje
kataloga
Tabelarni
prikaz
proizvoda
koji će se
koristiti u
katalogu
Unos
podataka o
primljenoj
robi
Prodavac c/s
LAN,
WEB
Naručivanje Kupac Unos podataka
o proizvodima
za naručivanje
Tabelarni
prikaz
narudžbenice
koja sadrži
podatke o
proizvodima
i o kupcu,
Filter
podataka po
datumu
prijem i
parametarska
štampa
narudžbenice
Unos
proizvoda za
katalog
Kupac WEB
Diplomski rad
39
Prijem
narudžbenica
Prodavac Tabelarni
prikaz
narudžbenica
Filter unetih
podataka
prema
rednim
brojevima
narudžbenica
Unos
podataka o
proizvodima
za
naručivanje
od kupca
Kupac c/s
LAN,
WEB
Plaćanje Kupac Unos podataka
o plaćanju
Tabelarni
prikaz
realizovanih
plaćanja
Tabelarni
prikaz
narudžbenica
WEB
Evidentiranje
uplata
Prodavac Unos podataka
o potvrdi
izvršenja uplate
kupca
(upoređivanjem
sa bankarskim
izvodom)
Tabelarni
prikaz
potvrđenih
uplata, Filter
podataka o
dospelim
uplatama
prema
datumu
plaćanja
Unos
podataka o
plaćanju od
strane kupca
Kupac c/s
LAN,
WEB
Slanje
poručene
robe
Prodavac Unos podataka
o slanju
proizvoda
Tabelarni
prikaz
podataka o
pošiljkama,
Filter
podataka o
slanju prema
broju
narudžbenice
i datumu
Unos
podataka o
proizvodima
za
naručivanje
od kupca.
Unos
podataka o
potvrdi
izvršenja
uplate kupca
Prodavac c/s
LAN,
WEB
Tabela 3.- Use case tabela [27]
Kompletan spisak softverskih funkcija koje treba da budu implementirane nastaju
kombinovanjem specifikacije zahteva i tabele preslikavanja i dat je u nastavku, prema profilima
korisnika.
Diplomski rad
40
Profil korisnika Admin
Softverske funkcije:
Unos nove opreme, Unos nove marke, Unos nove sprave, Unos novog tipa, Unos nove ishrane
Unos novog korisnika, Izmena postojećeg korisnika i dodeljivanje statusa, Unos podataka o
primljenoj robi, Unos podataka za katalog, Unos podataka o izvršenjoj uplati, Unos podataka o
slajnu proizvoda
Profil korisnika Kupac
Softverske funkcije:
Pregled opreme, pregled sprava, pregled ishrane, kupovina opreme, kupovina sprava, pravljenje
naloga, Unos podataka o proizvodima za naručivanje, Unos podataka o plaćanju
Taleba 4.- Prikaz mogućnosti admina i kupca
Slika 35.- Use case dijagram
Diplomski rad
41
6.3 Modeli implementiranog rešenja višeslojne arhitekture softvera
6.3.1 Dijagram komponenti
Dijagram prikazuje strukturne relacije između softverskih komponenti sistema. On ilustruje delove
softvera, ugrađene kontrolere i slično, i ima veći stepen apstrakcije od dijagrama klasa.[26
Dijagram komponenti služi za modeliranje izvornog koda, modeliranje izdanja za isporuku,
modeliranje izvršnih izdanja i okruženja, kao i modeliranje fizičkih baza podataka. Na sledećim
slikama će biti prikazan izgled dijagrama komponenti za našu aplikaciju razvrstanu po slojevima.
Slika 36.- Dijagram komponenti
Diplomski rad
43
6.3.2 Dijagram razmeštaja
Dijagram razmeštaja prikazuje statički pogled run-time hardverske konfiguracije i softverskih
komponenti koje se izvršavaju na tim čvorovima. Dijagram razmeštaja prikazuje hardver vašeg
sistema, softver koji je instaliran na tom sistemu i srednji sloj koji se koristi za povezivanje
međusobno razdvojenih mašina.[26]
Slika 38.- Dijagram razmeštaja
Diplomski rad
44
6.3.3 Dijagram klasa
Dijagram klasa nam daje mogućnot pregleda svih klasa unutar svakog sloja pojedinačno kao i
način na koji su klase međusobno povezane.
Slika 39.- Dijagram klasa
Diplomski rad
46
6.4 Korisničko uputstvo
Prilikom izrade seminarskog rada rađena je aplikacije za online prodaju fitness opreme.
Aplikacije je funkcionalna upostpunosti ali pored toga ima još dosta mesta za usavršavanje. Ova
aplikacija je primer stečenog znanja u pravljenju web apliakcije u programskom jeziku C# i
programu Visual Studio 2015.
Slika 41.- Prikaz početne stranice web sajta
Kad je korisnik ušao na web sajt potrebno je da se uloguje na svoj nalog kako bi bio u
mogućnosti da kupi neku od navedene opreme ili sprave. Korisnik treba da unese šifru i lozinku
svoj profila kako bi se ulogovao. Sledi proces autentifikacije i u koliko se e-mail i lozinka
poklapaju korisnik je ulogovan. Kad je ovo urađeno koisnik može da otvori bilo koju karticu iz
menija.
Diplomski rad
48
Slika 44.- Prikaz kartice sa ishranom
Sada kad korisnik ima uvid o opremi i spravama koje je u mogućnosti da kupi, kupovinu može
obaviti tako što pritisne na dugme Kupi, aplikacija zatim otvara korpu i dodaje opremu ili spravu
koju kupac želi. Korisnik zatim ima opciju da se vrati nazad i odabere još neku stavku za
kupovinu ili da nastavi sa kupovinom i unese svoje lične podatke.
Slika 45.- Prikaz korpe
Diplomski rad
49
Kad je korisnik odabrao opciju pojavljuju mu se jedna od dva navedena prozora
Slika 46.- Prozor koji se otvara prilikom dugmeta nastavak kupovine
Slika 47.- Prozor koji se javlja kad korisnik pritisne dugme Potvrdi
Nakon ovoga sledi prozor za odabir operatora za dostavu i unos koda za popust. Krajni prozor
izgleda ovako.
Diplomski rad
51
U koliko se ulogujemo kao admin pored navedenim opcija, administrator ima još neke dodatne
povoljnosti kao što su kreiranja nove opreme, marke, tipa marka, sprava i ishrane. Pored ovoga
administrator ima mogućnost rada sa profilima, dodavanja novih, izmena postojećih i brisanje.
Slika 49.- Prikaz prozora kad smo ulogovani kao administrator
Slika 50.- Prikaz prozora podataka o svim spravama kad smo ulogovani kao administrator
Diplomski rad
53
6.5 Opis implementacije
6.5.1 Plan i opis implementiranih elemenata višeslojne arhitekture
Prilikom izrade bilo je potrebno napraviti bazu podataka sa tabelama koje su vezane za pojmove
koje želimo da prikažemo kao što je oprema, sprave, ishrana i druge stvari koje su bitne za naš
sajt. Da bi baza podataka funkcionisala morali smo da napišemo SQL upite koji se nalaze u sloju
za rad sa bazom podataka. Takođe smo morali kreirati sloj modela koji će sadržati get i set
metodu čija je funkcija prikupljanje podataka i postavljanje u model. Da bi ovo sve funkcionisalo
kako treba moramo koristiti i web servis koji će nam omogućiti komunikaciju između web
aplikacije za onlajn prodaju i dobavljača. Poslednji sloj, prezentacioni sloj prikazuje ono što je
korisnik putem poruka zahtevao od aplikacije. Ovaj sloj komunicira sa ostalim slojevima kako bi
pružio što bolju uslugu korisniku.
SLOJ PODSLOJEVI PLAN IMPLMENTACIJE U
RADU
Prezentacioni sloj Korisnički interfejs Ekranska forma
Prezentaciona logika Kod je prikazan u obliku grafičkih
elemenata, sve aktivnosti su vezane
za klik na dugme
Klase iz View sloja
Sloj servisa Web servis Pristup podacima od dobavljača
Biblioteka klasa
servisa za mapiranje
Mapiranje između slojeva
Sloj poslovne logike i modela Poslovni objekti Korpa, dostava
Poslovna pravila Popust
Sloj za rad sa bazom podataka Biblioteke klasa za rad
sa bazom podataka
Klase repository
Klase modela
Baze podataka i
DBMS
Tabele i relacije baze podataka
U nastavku će biti opisani elementi implementacije po slojevima počevši od baze podataka ka
višim slojevima. Implementacija softverskog koda je realizovana na osnovu primera koji je rađen
u okviru vežbi iz predmeta Sofversko inženjerstvo 2.
Diplomski rad
54
6.5.2 SQL Script i šema baze podataka
U diplomskom radu smo koristili bazu podataka koju nam nudi program Visual Studio, međutim
bilo je porebno još instalirati podršku u vidu SQL server data tools-a kako bi svaka fukincija
radila kako treba. U nastavku ćemo prikazati spisak svih tabela unutar baze podataka:
CREATE TABLE [dbo].[T_MARKA] ( [MarkaId] INT IDENTITY (1, 1) NOT NULL, [Ime] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([MarkaId] ASC) );
CREATE TABLE [dbo].[T_TIP] ( [TipId] INT IDENTITY (1, 1) NOT NULL, [Ime] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([TipId] ASC) );
CREATE TABLE [dbo].[T_ISHRANA] ( [IshranaId] INT IDENTITY (1, 1) NOT NULL, [Ime] NVARCHAR (50) NOT NULL, [Opis] NVARCHAR (MAX) NOT NULL, [VelicinaObroka] NVARCHAR (50) NOT NULL, [TipId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([IshranaId] ASC), CONSTRAINT [fk_T_ISHRANA_T_TIP] FOREIGN KEY ([TipId]) REFERENCES [dbo].[T_TIP] ([TipId]) ); CREATE TABLE [dbo].[T_ISHRANA_IMAGE] ( [IshranaId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL ); CREATE TABLE [dbo].[T_OPREMA] ( [OpremaId] INT IDENTITY (1, 1) NOT NULL, [Ime] NVARCHAR (50) NOT NULL, [Opis] NVARCHAR (MAX) NOT NULL, [Cena] DECIMAL (8, 2) NOT NULL, [Boja] NVARCHAR (50) NOT NULL, [Velicina] NVARCHAR (20) NOT NULL, [MarkaId] INT NOT NULL, [TipId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([OpremaId] ASC), CONSTRAINT [fk_T_OPREMA_T_MARKA] FOREIGN KEY ([MarkaId]) REFERENCES [dbo].[T_MARKA] ([MarkaId]),
Diplomski rad
55
CONSTRAINT [fk_T_OPREMA_T_TIP] FOREIGN KEY ([TipId]) REFERENCES [dbo].[T_TIP] ([TipId]) ); CREATE TABLE [dbo].[T_OPREMA_IMAGE] ( [OpremaId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL ); CREATE TABLE [dbo].[T_SPRAVA] ( [SpravaId] INT IDENTITY (1, 1) NOT NULL, [Ime] NVARCHAR (50) NOT NULL, [Opis] NVARCHAR (MAX) NOT NULL, [Cena] DECIMAL(2, 8) NOT NULL, [Velicina] NVARCHAR (20) NOT NULL, [MarkaId] INT NOT NULL, [TipId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([SpravaId] ASC), CONSTRAINT [Fk_T_SPRAVA_T_MARKA] FOREIGN KEY ([MarkaId]) REFERENCES [dbo].[T_MARKA] ([MarkaId]), CONSTRAINT [Fk_T_SPRAVA_T_TIP] FOREIGN KEY ([TipId]) REFERENCES [dbo].[T_TIP] ([TipId]) ); CREATE TABLE [dbo].[T_SPRAVA_IMAGE] ( [SpravaId] INT NOT NULL, [ImageData] VARBINARY (MAX) NOT NULL, [ImageMimeType] NVARCHAR (50) NOT NULL ); CREATE TABLE [dbo].[T_KORISNIK] ( [KorisnikId] UNIQUEIDENTIFIER NOT NULL, [Ime] NVARCHAR (50) NOT NULL, [Šifra] NVARCHAR (50) NOT NULL, [Email] NVARCHAR (50) NOT NULL, [Uloga] NVARCHAR (20) NOT NULL, PRIMARY KEY CLUSTERED ([KorisnikId] ASC) );
Listing 1.- kod unutar tabela baze podataka
Diplomski rad
56
6.5.3 Ključni delovi koda sa objašnjenjem
6.5.2.1. Klase modela
Klase modela su generisane na osnovu baze podataka korišćenjem Entity Framework. Unutar
ovog sloja se nalaze klase koje su slične kao tabele u bazi podataka, tako da imaju privatne i
javne atribute sličnog naziva kao polja u tabelama, sa get i set metodama.
using Fitness.Oprema.Model.Entities.Marka; using Fitness.Oprema.Model.Entities.Tip; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Fitness.Oprema.Model.Entities.Sprave { public class Sprava { public int SpravaId { get; set; } public string Ime { get; set; } public string Opis { get; set; } public string Velicina { get; set; } public decimal Cena { get; set; } public Marka Marka { get; set; } public Tip Tip { get; set; } public SpravaImage SpravaImage { get; set; } public List<SpravaImage> SpravaImages { get; set; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Softversko2.Oprema.Model.Entities.Sprave { public class SpravaImage { public byte[] ImageData { get; set; } public string ImageMimeType { get; set; } } }
Listing 2.- Kod koji se nalazi unutar sloja Model
Diplomski rad
57
6.5.2.2. Klase repository
Klase ovog sloja sadrže mehanizme za aktivan rad sa bazom podataka kroz konekciju, SQL upite
i slično.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Fitness.Oprema.Model.Entities.Sprave { public interface ISpravaRepository { List<Sprava> ReadAll(); void Update(Sprava entity); void Create(Sprava entity); void Delete(int id); } }
using Fitness.Oprema.Model.Entities.Marka; using Fitness.Oprema.Model.Entities.TIp; using Fitness.Oprema.Model.Entities.Sprave; using System; using System.Collections.Generic; using System.Configuration; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Fitness.Oprema.Repository.Sprave { public class SpravaRepository : ISpravaRepository { private string _connectionString; public SpravaRepository() { _connectionString = ConfigurationManager.ConnectionStrings["OpremaConnectionString"].ConnectionString; } public List<Sprava> ReadAll() { List<Sprava> sprave = new List<Sprava>(); string queryStringSprava = "SELECT p.SpravaId, p.Ime, p.Opis, p.Velicina, p.Cena , p.ImageData, p.ImageMimeType, " + " b.MarkaId, b.Ime, " + " c.TipId, c.Ime " +
Diplomski rad
58
"FROM dbo.T_SPRAVA p, dbo.T_Marka b, dbo.T_Tip c " + "WHERE p.MarkaId = b.MarkaId AND p.TipId = c.TipId"; string queryStringSpravaImages = "SELECT SpravaId, ImageData, ImageMimeType FROM dbo.T_SPRAVA_IMAGE WHERE SpravaId = @SpravaId"; using (SqlConnection connection = new SqlConnection(_connectionString)) { SqlCommand command = connection.CreateCommand(); command.CommandText = queryStringSprava; connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { Sprava sprava; while (reader.Read()) { sprava = new Sprava(); sprava.SpravaId = Int32.Parse(reader[0].ToString()); sprava.Ime = reader[1].ToString(); sprava.Opis= reader[2].ToString(); sprava.Velicina = reader[3].ToString(); sprava.Cena = Decimal.Parse(reader[4].ToString()); sprava.SpravaImage = new SpravaImage(); sprava.SpravaImage.ImageData = string.IsNullOrEmpty(reader[5].ToString()) ? null : (byte[])reader[5]; sprava.SpravaImage.ImageMimeType = reader[6].ToString(); sprava.Marka = new Oprema(); sprava.Marka.MarkaId = Int32.Parse(reader[7].ToString()); sprava.Marka.Ime = reader[8].ToString(); sprava.Tip = new Tip(); sprava.Tip.TipId = Int32.Parse(reader[9].ToString()); sprava.Tip.Ime = reader[10].ToString(); sprave.Add(sprava); } } foreach (Sprava sprava in sprave) { sprava.SpravaImages = new List<SpravaImage>(); SqlCommand commandSpravaImage = connection.CreateCommand(); commandSpravaImage.CommandText = queryStringSpravaImages; commandSpravaImage.Parameters.Add(new SqlParameter("@SpravaId", sprava.SpravaId)); using (SqlDataReader reader = commandSpravaImage.ExecuteReader()) { while (reader.Read()) { SpravaImage spravaImage = new SpravaImage(); spravaImage.ImageData = (byte[])reader[1]; spravaImage.ImageMimeType = reader[2].ToString(); sprava.SpravaImages.Add(spravaImage); }
Diplomski rad
59
} } } return sprave; } public void Update(Sprava entity) { string updateSpravaSql = "UPDATE T_SPRAVA SET Ime = @Ime, Opis = @Opis, Cena= @Cena," + "Velicina = @Velicina, MarkaId = @MarkaId, TipId = @TipId, ImageData = @ImageData, ImageMimeType = @ImageMimeType " + "WHERE SpravaId = @SpravaId;"; string deleteSpravaImageSql = "DELETE T_SPRAVA_IMAGE WHERE SpravaId = @SpravaId;"; string insertSpravaImageSql = "INSERT INTO T_SPRAVA_IMAGE (SpravaId, ImageData, ImageMimeType) " + "VALUES (@SpravaId, @ImageData, @ImageMimeType)"; using (SqlConnection connection = new SqlConnection(_connectionString)) { SqlCommand commandSprava = connection.CreateCommand(); commandSprava.CommandText = updateSpravaSql; commandSprava.Parameters.Add(new SqlParameter("@SpravaId", entity.SpravaId)); commandSprava.Parameters.Add(new SqlParameter("@Ime", entity.Ime)); commandSprava.Parameters.Add(new SqlParameter("@Opis", entity.Opis)); commandSprava.Parameters.Add(new SqlParameter("@Velicina", entity.Velicina)); commandSprava.Parameters.Add(new SqlParameter("@Cena", entity.Cena)); commandSprava.Parameters.Add(new SqlParameter("@MarkaId", entity.Marka.MarkaId)); commandSprava.Parameters.Add(new SqlParameter("@TipId", entity.Tip.TipId)); commandSprava.Parameters.Add(new SqlParameter("@ImageData", entity.SpravaImage.ImageData)); commandSprava.Parameters.Add(new SqlParameter("@ImageMimeType", entity.SpravaImage.ImageMimeType)); connection.Open(); commandSprava.ExecuteNonQuery(); SqlCommand commandDeleteSpravaImages = connection.CreateCommand(); commandDeleteSpravaImages.CommandText = deleteSpravaImageSql; commandDeleteSpravaImages.Parameters.Add(new SqlParameter("@SpravaId", entity.SpravaId)); commandDeleteSpravaImages.ExecuteNonQuery(); SqlCommand commandInsertSpravaImages = connection.CreateCommand(); commandInsertSpravaImages.CommandText = insertSpravaImageSql; foreach (SpravaImage spravaImage in entity.SpravaImages) { commandInsertSpravaImages.Parameters.Clear(); commandInsertSpravaImages.Parameters.Add(new SqlParameter("@SpravaId", entity.SpravaId)); commandInsertSpravaImages.Parameters.Add(new SqlParameter("@ImageData", spravaImage.ImageData)); commandInsertSpravaImages.Parameters.Add(new
Diplomski rad
60
SqlParameter("@ImageMimeType", spravaImage.ImageMimeType)); commandInsertSpravaImages.ExecuteNonQuery(); } } } public void Create(Sprava entity) { string insertSpravaSql = "INSERT INTO T_SPRAVA (Ime, Opis, Velicina, Cena, MarkaId, TipId, ImageData, ImageMimeType) " + "VALUES (@Ime, @Opis, @Velicina, @Cena, @MarkaId, @TipId, @ImageData, @ImageMimeType); " + "SELECT CAST(SCOPE_IDENTITY() AS INT);"; string insertSpravaImageSql = "INSERT INTO T_SPRAVA_IMAGE (SpravaId, ImageData, ImageMimeType) " + "VALUES (@SpravaId, @ImageData, @ImageMimeType)"; using (SqlConnection connection = new SqlConnection(_connectionString)) { SqlCommand commandSprava = connection.CreateCommand(); commandSprava.CommandText = insertSpravaSql; commandSprava.Parameters.Add(new SqlParameter("@Ime", entity.Ime)); commandSprava.Parameters.Add(new SqlParameter("@Opis", entity.Opis)); commandSprava.Parameters.Add(new SqlParameter("@Velicina", entity.Velicina)); commandSprava.Parameters.Add(new SqlParameter("@Cena", entity.Cena)); commandSprava.Parameters.Add(new SqlParameter("@MarkaId", entity.Marka.MarkaId)); commandSprava.Parameters.Add(new SqlParameter("@TipId", entity.Tip.TipId)); commandSprava.Parameters.Add(new SqlParameter("@ImageData", entity.SpravaImage.ImageData)); commandSprava.Parameters.Add(new SqlParameter("@ImageMimeType", entity.SpravaImage.ImageMimeType)); connection.Open(); int insertedId = (int)commandSprava.ExecuteScalar(); SqlCommand commandSpravaImage = connection.CreateCommand(); commandSpravaImage.CommandText = insertSpravaImageSql; foreach (SpravaImage spravaImage in entity.SpravaImages) { commandSpravaImage.Parameters.Clear(); commandSpravaImage.Parameters.Add(new SqlParameter("@SpravaId", insertedId)); commandSpravaImage.Parameters.Add(new SqlParameter("@ImageData", spravaImage.ImageData)); commandSpravaImage.Parameters.Add(new SqlParameter("@ImageMimeType", spravaImage.ImageMimeType)); commandSpravaImage.ExecuteNonQuery(); } } } public void Delete(int id) { string deleteSql = "DELETE T_SPRAVA WHERE SpravaId = @SpravaId;" + "DELETE T_SPRAVA_IMAGE WHERE SpravaId = @SpravaId;";
Diplomski rad
61
using (SqlConnection connection = new SqlConnection(_connectionString)) { SqlCommand command = connection.CreateCommand(); command.CommandText = deleteSql; command.Parameters.Add(new SqlParameter("@SpravaId", id)); connection.Open(); command.ExecuteNonQuery(); } } } }
Listing3.- Prikaz koda u sloju za upravljanje bazom podataka
6.5.2.3. Klasa poslovnih pravila
Klase ovog sloja sadrže poslovna pravila i matematičke metode kojima se određuje popust nekog
proizvoda.
namespace Fitness.Oprema.Model.Entities.Korpa { public class Popust : IPopust { public decimal GetTotalCostAfterApplyingDiscountTo(Popust popust) { if (popust.ComputeTotalValue() > 5000) return popust.ComputeTotalValue() - 500m; if (popust.ComputeTotalValue() > 2000) return popust.ComputeTotalValue() - 200m; else return popust.ComputeTotalValue(); } } }
Listing 4.- Kod unutar klase Popust
Diplomski rad
62
6.5.2.4. Klasa poslovnih objekta
Unutar ovog sloja nalaze se klase sa klase koja se koristi za korpu i klasa operatera dobavljača.
using Fitness.Oprema.Model.Entities.Oprema; using System.Collections.Generic; using System.Linq; namespace Fitness.Oprema.Model.Entities.Korpa { public class Popust { private List<PopustLine> lineCollection = new List<PopustLine>(); private IPoputStrategija Popust; public void SetPopustStrategiju(string discountType) { Popust = PopustFaktor.GetDiscount(discountType); } public void AddItem(Oprema oprema, int quantity) { PopustLine line = lineCollection .Where(p => p.Oprema.OpremaId == oprema.OpremaId) .FirstOrDefault(); if (line == null) { lineCollection.Add(new PopustLine { Oprema = oprema, Quantity = quantity }); } else { line.Quantity += quantity; } } public void RemoveLine(Oprema oprema) { lineCollection.RemoveAll(l => l.Oprema.OpremaId == oprema.OpremaId); } public decimal ComputeTotalValue() { return lineCollection.Sum(e => e.Oprema.Price * e.Quantity); } public decimal ComputeTotalValueAfterPopust() { return Popust.GetTotalCostAfterApplyingPopustTo(this);
Diplomski rad
63
} public void Clear() { lineCollection.Clear(); } public IEnumerable<Popust> get { return lineCollection; } } } public class PopustLine { public Oprema Oprema { get; set; } public int Quantity { get; set; } } }
Listing 5.- Kod unutar klase Korpa
namespace Fitness.Oprema.Model.Entities.Dostava { public class AksDelivery : IDostavaOperator { public decimal getDeliveryPrice() { return 250; } public string getDeliveryTime() { return "3 radna dana"; } } }
namespace Fitness.Oprema.Model.Entities.Dostava { public class BexDelivery : IDostavaOperator { public decimal getDeliveryPrice() { return 300M; } public string getDeliveryTime() { return "2 radna dana"; } } } namespace Fitness.Oprema.Model.Entities.Dostava
Diplomski rad
64
{ public static class DostavaFaktor { public static IDostavaOperator CreateDeliveryOperator(string operatorName) { if (operatorName == "Aks") return new AksDelivery(); else return new BexDelivery(); } } } namespace Fitness.Oprema.Model.Entities.Dostava { public interface IDostavaOperator { decimal getDeliveryPrice(); string getDeliveryTime(); } }
namespace Fitness.Oprema.Model.Entities.Dostava { public class DostavaDetails { public string Address { get; set; } public string City { get; set; } public string Zip { get; set; } public string Country { get; set; } } }
Listing 6.- Kod unutar klase shipping
6.5.2.5. Biblioteka klasa servisa za mapiranje
Kod unutar klase služi za transformaciju poruka između prezentacionog sloja i sloja modela.
using Fitness.Oprema.AppService.Messages.Sprave; using Fitness.Oprema.Model.Entities.Marka; using Fitness.Oprema.Model.Entities.Tip; using Fitness.Oprema.Model.Entities.Sprave; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Fitness.Oprema.AppService.Mappings.Sprave { public static class SpravaMapper { public static Sprava ConvertToSprava(this CreateSpravaRequest createRequest) {
Diplomski rad
65
Sprava sprava = new Sprava(); sprava.Ime = createRequest.Ime; sprava.Opis = createRequest.Opis; sprava.Velicina = createRequest.Velicina; sprava.Marka = new Marka() { MarkaId = createRequest.MarkaId }; sprava.Tip = new Tip() { TipId = createRequest.TipId }; sprava.SpravaImage = createRequest.SpravaImage; sprava.SpravaImages = createRequest.SpravaImages; return sprava; } public static Sprava ConvertToSprava(this UpdateSpravaRequest updateRequest) { Sprava sprava = new Sprava(); sprava.SpravaId = updateRequest.SpravaId; sprava.Ime = updateRequest.Ime; sprava.Opis = updateRequest.Opis; sprava.Velicina = updateRequest.Velicina; sprava.Marka = new Marka() { MarkaId = updateRequest.MarkaId }; sprava.Tip = new Tip() { TipId = updateRequest.TipId }; sprava.SpravaImage = updateRequest.SpravaImage; sprava.SpravaImages = updateRequest.SpravaImages; return sprava; } } }
Listing 7.- Kod unutar klase Sprav.Mapper
6.5.2.6. Klase web servisa
Unutar ovih klasa se na nalazi kod koji nam daje mogućnost da se povežemo sa URL-om
dobavljača, kako bismo omogućili on-line usklađivanje podataka o robi sa web aplikacijom za
prodaju proizvoda.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data; namespace WebService1 { /// <summary> /// Summary description for Service1 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment
Diplomski rad
66
the following line. // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { // procedura koja na osnovu naziva robe vraca naziv proizvodjaca [WebMethod] public string DajNazivProizvodjaca(string NazivRobe) { string NazivProizvodjaca = ""; DataSet dsProizvodjaci = new DataSet(); dsProizvodjaci.ReadXml(Server.MapPath("~/") + "XML/Proizvodjaci.XML"); // filtriranje dataset-a DataRow[] result = dsProizvodjaci.Tables[0].Select("NazivRobe='" + NazivRobe + "'"); NazivProizvodjaca = result[0].ItemArray[0].ToString(); return NazivProizvodjaca; } // procedura koja na osnovu naziva robe vraca CENU ROBE [WebMethod] public string DajCenuRobe(string NazivRobe) { string CenaRobe = ""; DataSet dsProizvodjaci = new DataSet(); dsProizvodjaci.ReadXml(Server.MapPath("~/") + "XML/Roba.XML"); // filtriranje dataset-a DataRow[] result = dsProizvodjaci.Tables[0].Select("NazivRobe='" + NazivRobe + "'"); CenaRobe = result[0].ItemArray[2].ToString(); return CenaRobe; } // procedura koja vraca detaset sa nazivima robe [WebMethod] public DataSet DajDataSetNazivaRoba() { DataSet dsProizvodjaci = new DataSet(); dsProizvodjaci.ReadXml(Server.MapPath("~/") + "XML/Roba.XML"); return dsProizvodjaci; } [WebMethod] public DataSet DajDataSetNazivaProizvodjaca () { DataSet dsProizvodjaci = new DataSet(); dsProizvodjaci.ReadXml(Server.MapPath("~/") + "XML/Proizvodjaci.XML"); return dsProizvodjaci; }
Listing 8.- Kod unutar klase WebServise1
Diplomski rad
67
6.5.2.7. Mogućnost poziva web servisa u okviru aplikacije
Web servis je zapravo on-line bibliteka klasa i koristi se putem aliasa koji se daje za URL dalje
kao da je naziv biblioteke klasa. Nadalje, instanciramo objekat klase iz web servisa i koristimo
metode. U nastavku je dat kod koji prikazuje metodu ReadAll iz sloja Repository za sprave.
public List<Sprava> ReadAll() { List<Sprava> sprave = new List<Sprava>(); string queryStringSprava = "SELECT p.SpravaId, p.Ime, p.Opis, p.Velicina , p.ImageData, p.ImageMimeType, " + " b.MarkaId, b.Ime, " + " c.TipId, c.Ime " + "FROM dbo.T_SPRAVA p, dbo.T_MARKA b, dbo.T_TIP c " + "WHERE p. MarkaId = b. MarkaId AND p.TipId = c.TipId "; string queryStringSpravaImages = "SELECT SpravaId, ImageData, ImageMimeType FROM dbo.T_SPRAVA_IMAGE WHERE SpravaId = @SpravaId"; using (SqlConnection connection = new SqlConnection(_connectionString)) { SqlCommand command = connection.CreateCommand(); command.CommandText = queryStringSprava; connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { Sprava sprava; while (reader.Read()) { sprava = new Sprava(); sprava.SpravaId = Int32.Parse(reader[0].ToString()); sprava.Ime = reader[1].ToString(); sprava.Opis= reader[2].ToString(); sprava.Velicina = reader[3].ToString(); sprava.SpravaImage = new SpravaImage(); sprava.SpravaImage.ImageData = string.IsNullOrEmpty(reader[4].ToString()) ? null : (byte[])reader[4]; sprava.SpravaImage.ImageMimeType = reader[5].ToString(); sprava.Marka = new Marka(); sprava.Marka.MarkaId = Int32.Parse(reader[6].ToString()); sprava.Marka.Ime = reader[7].ToString(); sprava.Tip = new Tip(); sprava.Tip.TipId = Int32.Parse(reader[8].ToString()); sprava.Tip.Ime = reader[9].ToString(); sprave.Add(sprava); } } foreach (Sprava sprava in sprave)
Diplomski rad
68
{ sprava.SpravaImages = new List<SpravaImage>(); SqlCommand commandSpravaImage = connection.CreateCommand(); commandSpravaImage.CommandText = queryStringSpravaImages; commandSpravaImage.Parameters.Add(new SqlParameter("@SpravaId", sprava.SpravaId)); using (SqlDataReader reader = commandSpravaImage.ExecuteReader()) { while (reader.Read()) { SpravaImage spravaImage = new SpravaImage(); spravaImage.ImageData = (byte[])reader[1]; spravaImage.ImageMimeType = reader[2].ToString(); sprava.SpravaImages.Add(spravaImage); } } } } return sprave; }
Listing 9.- prikaz koda unutra klase Sprava u repoitory sloju
Izmenjeni kod kojim se prikazuje mogućnost poziva web servisa za preuzimanje podataka,
umesto iz baze podataka, dat je u nastavku.
U projektu smo dodali „Service reference“ i URL-u web servisa dodelili naziv, tj. Alias.
Slika 52. Izgled solution explorera nakon dodavanja web servisa
Diplomski rad
69
U programskom kodu, pozivanje i korišćenje web servisa prikazano je u nastavku:
public List<Proizvodjac> ReadAll() { List<Proizvodjac> proizvodjac = new List< Proizvodjac >(); // Pozivanje web servisa koji obezbedjuje podatke VebServis.Service1 objVebServis = new VebServis.Service1(); System.Data.DataSet dsProizvodjaci = objVebServis.DajDataSetNazivaProizvodjaca (); Int brojzapisa = dsProizvodjaci.Tables[0].Rows.Count;
Proizvodjac objProizvodjac; For (i=0; i<=brojzapisa; i++) { objProizvodjac = new Proizvodjac (); sprava.ProizvodjacId = Int32.Parse(reader[0].ToString()); sprava.Ime = reader[1].ToString(); sprave.Add(sprava); }
Listing 10.- Prikaz koda koji se implementira za web servis
Kolekcija objekata klase Proizvodjac u formi liste je spremna za koriscenje kod punjenja combo
boxa npr. na formi za unos nove robe.
6.5.2.8. Klase i html pogledi unutar prezentacionog sloja
Unutar ovog sloja se nalaze klase koje nam omogućavaju prikaz podataka koje korisnik putem
poruka zahteva od aplikacije. Takođe, date su i klase kontrolera i html osnova pogleda.
Model klasa sadrži objekte istoimene klase unutar model sloja sa get i set metodom. Kontroler
zatim preuzima vrednosti iz datog modela na zahtev korisnika i šalje podatke pogledu koji ih
ispisuje.
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Fitness.EStore.Web.Areas.Products.Models { public class AllSpravePageViewModel { public List<SpravaViewModel> SpravaViewModels { get; set; } public bool Success { get; set; } public string ErrorMessage { get; set; } } }
Listing 11.-Kod unutar klase Model
Diplomski rad
70
using Fitness.Oprema.AppService.Abstractions.Sprave; using Fitness.Oprema.AppService.Messages.Sprave; using Fitness.Oprema.Model.Entities.Sprave; using Fitness.Oprema..Web.Areas.Products.Models; using Fitness.Oprema.Web.Mappings.Sprave; using Fitness.Oprema.Web.Models.Sprave; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Fitness.Oprema.Web.Areas.Products.Controllers { public class SpravaController : Controller { private ISpravaService spravaService; public SpravaController(ISpravaService spravaService) { this.spravaService = spravaService; } // GET: Products/Product public ActionResult Index() { FindAllSpraveResponse response = new FindAllSpraveResponse(); response = spravaService.FindAllSprave(); AllSpravePageViewModel model = new AllSpravePageViewModel(); model.SpravaViewModels = response.Sprave.ConvertToSpravaViewModelList(); model.Success = response.Success; model.ErrorMessage = response.Message; return View(model); } public FileContentResult GetImage(int spravaId) { SpravaViewModel spravaViewModel = spravaService.FindAllSprave().Sprave. Find(x => x.SpravaId == spravaId).ConvertToSpravaViewModel(); if (spravaViewModel != null) { return File(spravaViewModel.SpravaImageViewModel.ImageData, spravaViewModel.SpravaImageViewModel.ImageMimeType); } else { return null; }}}}
Listing 12.- Kod unutar klase SpravaController
@model Fitness.Oprema.Web.Areas.Products.Models.AllSpravePageViewModel
Diplomski rad
71
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Sprave</h2> <hr /> <form class="navbar-form navbar-fixed-left" role="search"> <div class="form-group"> <input type="text" class="form-control" placeholder="Search"> </div> <button type="submit" class="btn btn-default">Submit</button> </form> @if (Model.Success) { <div class="row"> <div class="col-md-12"> @foreach (var p in Model.SpravaViewModels) { <div class="col-md-4"> <div class="thumbnail"> <h4 class="text-center"><span class="label label-info">@p.BrandName</span></h4> <img src="@Url.Action("GetImage", "Sprava", new { p.SpravaId, area = "Products" })" style="height: 250px" /> <div class="caption"> <div class="row"> <div class="col-md-6"> <h3>@p.Ime </h3> </div> <div class="col-md-6 price"> </div> </div> <div class="row"> <div class="col-md-6"> <a class="btn btn-primary btn-block"><span class="glyphicon glyphicon-list"></span> Više</a> </div> </div> </div> </div> </div> } </div> </div> } else { <div class="row"> <div class="col-md-12"> <div class="alert alert-danger"> <a href="#" class="close" data-dismiss="alert" aria-
Diplomski rad
72
label="close">×</a> <strong>Greška!</strong> @Model.ErrorMessage </div> </div> </div> }
Listing 13.- Kod unutar Index pogleda u oprema, area oprema
Diplomski rad
73
7. Zaključak
Prilikom izrade ovog diplomskog rada, rađena je aplikacija za online prodaju fitness opreme.
Obuhvaćen je razvoj aplikacije od specifikacije do implementacije svakog sloja pojedinačno.
Pojedini delovi koda su dati kao mogućnost, koja ilustruje način daljeg razvoja aplikacije. Ovo je
ilustrativni primer urađene višeslojne aplikacije.
Krenuli smo od sloja za upravljanje bazom podataka gde smo ispisali SQL upite koje smo dalje
koristili kako bi komunicirali sa bazom i preuzeli podatke koji su nam potrebni. Zatim smo
kreirali sloj poslovne logike sa poslovnim objektima i pravilima (popusti, dostava itd). Sledeći
sloj je sloj web servisa u kojem smo kreirali poruke i odgovore na zahtev od strane korisnika u
sloju prezentacione logike. Takođe ovde smo koristili mappere za transformaciju odgovora,
interfejs i imprementaciju datog interfejsa. Zatim prelazimo u poslednji sloj aplikacije a to je
prezentacioni sloj. U ovom sloju se nalaze samo minimalna preuzeta svojstva od sloja modela i
ovaj sloj je interfejs koji korisnik vidi. Kreirali smo dve „area“ koje su nam dale mogućnost koji
deo će videti svi korisnici a koji samo sa dopuštenjem (personalizovano u odnosu na prijavljenog
korisnika).
Ova aplikacija ima potencijala da se proširi i da korisnicima još potpuniju uslugu. Može se
kreirati kartica koje bi povlačile slike iz kartice sprave i opreme u kombinaciji da bi se videlo
neophodno za trening određene grupe. Jedna stvar na kojoj se takođe može raditi je odvajanje
tehnologija baze podataka od samih tabela.
Za višeslojnu aplikaciju je od bitnog značaja da može da se isporuči na druge frameworke stoga
od velikog značaja je izučiti dostupne frameworke poput ReSharper-aa ili Rider-a.
Diplomski rad
74
8. Literatura
1. file:///C:/Users/Win7/Downloads/www2_5._soa_skraceno.pdf
2. https://www.scribd.com/document/120583811/Servisno-Orjentisana-Arhitektura-Skripta
3. https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm
4. http://www.c-sharpcorner.com/blogs/principals-of-service-oriented-architecture-soa1
5. http://www.sbs.rs/servisno-orijentisana-arhitektura-soa
6. https://developer.xamarin.com/guides/xamarin-forms/cloud-services/consuming/asmx/
7. http://opusteno.rs/teretana-f163/sta-je-to-zapravo-fitnes-t22172.html
8. https://www.maxcdn.com/one/visual-glossary/web-application/
9. https://docs.oracle.com/cd/E41633_01/pt853pbh1/eng/pt/tsvt/task_ServerConfigurationO
ptions-4d7ed6.html
10. http://www.maturskiradovi.net/forum/attachment.php?aid=1167
11. http://poincare.matf.bg.ac.rs/~milena/msnr/2016/08/06_KonceptiUpravljanjaProjektimaC
erovinaZivkovic.pdf
12. http://project-management-srbija.com/project-management/dva-osnovna-principa-
upravljanja-projektima
13. http://www.sportskitrening.hr/motivacija-postavljanje-ciljeva/
14. https://mojforum.net/index.php?topic=568.0
15. https://www.webprogramiranje.org/web-servisi-osnove/
16. http://terasolunaorg.github.io/guideline/5.2.0.RELEASE/en/ArchitectureInDetail/WebSer
viceDetail/REST.html
17. http://www.rapidvaluesolutions.com/web-services-data-transfer-frameworks-for-mobile-
enabling-applications/
18. http://coddu.com/microsoft-launches-visual-studio-2015/
19. https://raf.edu.rs/citaliste/programiranje/4079-sta-je-xa-net-xa
20. https://www.tutorialspoint.com/asp.net_mvc/asp.net_mvc_pattern.htm
21. https://msdn.microsoft.com/en-us/library/hh272686%28v=vs.103%29.aspx
22. https://www.hanselman.com/blog/VisualStudio2015ReleasedPlusASPNET5Roadmap.as
px
23. http://www.bktvnews.com/zdravlje/fitnes/uvek-birajte-kvalitetnu-sportsku-obucu-i-
opremu-jer-je-to-podjednako-bitno-koliko-i-trening/73676
24. http://www.bktvnews.com/zdravlje/fitnes/uvek-birajte-kvalitetnu-sportsku-obucu-i-
opremu-jer-je-to-podjednako-bitno-koliko-i-trening/73676
25. http://www.linuxjournal.com/article/3508
26. http://www.vps.ns.ac.rs/Materijal/mat22111.pdf
27. https://www.techopedia.com/definition/467/two-tier-architecture
28. Diplomski rad, Jovana Josić ”Online prodaja cveća”, 2017.
29. http://www.webservicex.net/globalweather.asmx