tehnički fakultet „mihajlo pupin“ rad tamas njari.pdf · • arhitektura zasnovana na...
TRANSCRIPT
Univerzitet u Novom Sadu
Tehnički fakultet „Mihajlo Pupin“
Zrenjanin
TEMA: SOFTVERSKA ARHITEKTURA DISTRIBUIRANIH INFORMACIONIH
SISTEMA
SUBJECT: SOFTWARE ARCHITECTURE IN DISTRIBUTED INFORMATION
SYSTEMS
-Master rad–
Mentor: Student:
Doc. dr Ljubica Kazi Tamaš Njari, MIT 18/17
Informacione tehnologije - master
Zrenjanin, 2017.
2
Univerzitet u Novom Sadu
Tehnički Fakultet "Mihajlo Pupin" Zrenjanin
Ključna dokumentacijska informacija
Redni broj:
RBR
Identifikacioni broj:
IBR
Tip dokumentacije:
TD
Monografska dokumentacija
Tip zapisa:
TZ
Tekstualni štampani materijal
Vrsta rada (dipl, mag, dokt):
VR
Master rad
Ime i prezime autora:
AU
Tamaš Njari
Mentor (titula, ime, prezime, zvanje):
MN
Prof. dr. Ljubica Kazi
Naslov rada:
NR
Softverska arhitektura distribuiranih informacionih sistema
Jezik publikacije:
JP
Srpski (latinica)
Jezik izvoda:
JI
Srpski (latinica) / Engleski
Zemlja publikovanja:
ZP
Srbija
Uže geografsko područje:
UGP
Vojvodina
Godina:
GO
2018.
Izdavač:
IZ
Autorski reprint
Mesto i adresa:
MA
Tehnički fakultet ''Mihajlo Pupin'', Đure Đakovića bb Zrenjanin
Fizički opis rada:
FO
Broj poglavlja 7 / strana 55 / slika 22/ listinga 9/
Naučna oblast:
NO
Informacione tehnologije
Naučna disciplina:
ND
Distribuirani informacioni sistemi
Predmetna odrednica, ključne reči:
PO
MVC, Distribuirane, RestFul,
UDK
Čuva se:
ČU
U biblioteci Tehničkog Fakulteta „Mihajlo Pupin“ Zrenjanin
Važna napomena:
VN
Izvod:
IZ
U ovom radu opisane su tehnike koje se primenjuju u okviru softverska arhitekture
distribuiranih informacionih sistema. Opisane su osnovne tehnike višeslojne
objektno – orientisane arhitekture sa slojevima , MVC arhitektura, kao i softverske
arhitekture koje podražavaju razne modele kolaboracije. Primer je realizovan
korišćenjem Entity framework-a, MVC arhitekturom, RestFul servisom, PHP
programskim jezikom, .Net framework-om i programsko razvojno okruženje
Microsoft Visual Studio.
Datum prihvatanja teme od strane NN veća:
DP
Datum odbrane:
DO
3
Članovi komisije: (ime i prezime / titula / zvanje
/ naziv organizacije / status)
KO
4
University of Novi Sad
Technical Faculty "Mihajlo Pupin" Zrenjanin
Key word documentation
Accesion number:
ANO
Identification number:
INO
Document type:
DT
Monograph Document
Type of record:
TR
Textual printed material
Concents code:
CC
M.Sc thesis
Author:
AU
Tamaš Njari
Menthor:
MN
Prof. dr. Ljubica Kazi
Title:
TI Software architecture in distributed information systems
Language of text:
LT
Serbian (Latin)
Language of abstract:
LA
English / Serbian
Country of publication:
CP
Serbia
Locality of publication:
LP
Vojvodina
Publication year:
PY
2018.
Publisher:
PU
Author’s Reprint
Publication place:
PP
Technical faculty '' Mihajlo Pupin'' Đure Đakovića bb Zrenjanin
Physical description:
PD
chapters 7 / pages 55 / pictures 22/ lists of code 9/
Scientific field:
SF
Distributed information systems
Scientific discipline:
SD
Methodology of research work
Subject, Key words:
SKW
MVC, Distributed, RestFul
UC
Holding Data:
HD
Library of Technical Faculty “Mihajlo Pupin“, Zrenjanin
Note:
N
Abstract:
AB
This paper describes the techniques used in the software architecture of distributed
information systems. The basic techniques of multilayered object-oriented
architecture with layers, MVC architectures, and software architectures that reflect
various collaborative models are described. An example is realized using Entity
framework, MVC architecture, RestFul service, PHP programming language, .Net
framework and Microsoft Visual Studio development environment
Accepted on Scientific Board on:
AS
Defended:
DE
5
Thesis defend Board:
DB
6
Sadržaj
1. Metodološki okvir istraživanja ............................................................................................ 9
1.1. Predmet i problem istraživanja ....................................................................................... 9
1.2. Način istraživanja ............................................................................................................ 9
1.3. Cilj i zadaci istraživanja ................................................................................................... 9
1.4. Hipoteze u istraživanju .................................................................................................... 9
1.5. Očekivani rezultati ........................................................................................................ 10
1.6. Metodološki postupak................................................................................................... 10
2. Teorijsko istraživanje......................................................................................................... 11
2.1. Stilovi softverske arhitekture ........................................................................................ 11
2.1.1. Slojevita arhitektura ...................................................................................................... 12
2.1.2. Objektno-orijentisana arhitektura ................................................................................ 12
2.1.3. Podacima usredsređena arhitektura ............................................................................ 13
2.1.4. Arhitektura zasnovana na događajima ........................................................................ 14
2.2. Softverski arhitekturni paterni ...................................................................................... 15
2.2.1. Višeslojna arhitektura ................................................................................................... 16
2.2.2. MVC arhitektura............................................................................................................ 18
2.2.3. Komparacije višeslojne arhitekture i MVC arhitektura ................................................. 20
3. Stručno istraživanje ........................................................................................................... 23
3.1. Komparativna analiza karakteristika MVC u raznim verzijama u okviru .NET tehnologije ................................................................................................................................ 23
3.2. MVC u .NET-u ................................................................................................................ 25
3.2.1. .NET Framework ............................................................................................................ 26
3.2.2. .NET Core ....................................................................................................................... 26
3.3. MVC u Javi ..................................................................................................................... 27
3.3.1. Spring MVC .................................................................................................................... 28
3.3.2. Strust ............................................................................................................................. 28
3.4. MVC u PHP-u ................................................................................................................. 29
3.4.1. Laravel ........................................................................................................................... 30
3.4.2. Symfony ......................................................................................................................... 30
7
3.5. SOA arhitektura ............................................................................................................. 31
3.5.1. Web servisi SOAP i Restful ............................................................................................ 31
4. Rezultati naučno-stručnih istraživanja .............................................................................. 34
4.1. Popularnost programskih jezika ................................................................................... 34
4.2. Statistika korišćenja Veb servisa ................................................................................... 36
4.3. Najbolji alati za testiranje API ....................................................................................... 37
5. Implementirano rešenje .................................................................................................... 40
5.1. Opis poslovnog konteksta ............................................................................................. 40
5.2. Cilj i opis korišćenih tehnologija .................................................................................... 40
5.2.1. Microsoft Visual Studio 2017 ........................................................................................ 40
5.2.2. Entity Framework .......................................................................................................... 40
5.3. Korisničko uputstvo ....................................................................................................... 41
5.4. Opis implementacije...................................................................................................... 42
5.4.1. Kreiranje MVC projekta ................................................................................................. 42
5.4.1.1. Model ........................................................................................................................ 42
5.4.1.2. Kreiranje baze podataka pomoću Entity Framework-a ............................................ 42
5.4.1.3. Controller .................................................................................................................. 43
5.4.1.4. View ........................................................................................................................... 45
5.4.2. RESTFul servis ................................................................................................................ 45
5.4.2.1. Kreiranje RESTFul servisa .......................................................................................... 45
5.4.2.2. Kontrolisanje RESTFul API-a ...................................................................................... 48
5.4.2.3. Kreiranje prikaza ....................................................................................................... 50
5.4.3. Povezivanje PHP aplikacije sa veb serverom................................................................. 51
6. Zaključak ........................................................................................................................... 53
7. Literatura .......................................................................................................................... 54
8
Apstrakt
U ovom radu opisane su tehnike koje se primenjuju u okviru softverska arhitekture distribuiranih
informacionih sistema. Opisane su osnovne tehnike višeslojne objektno – orientisane arhitekture
sa slojevima , MVC arhitektura, kao i softverske arhitekture koje podražavaju razne modele
kolaboracije. Primer je realizovan korišćenjem Entity framework-a, MVC arhitekturom, RestFul
servisom, PHP programskim jezikom, .Net framework-om i programsko razvojno okruženje
Microsoft Visual Studio.
Abstract
This paper describes the techniques used in the software architecture of distributed information
systems. The basic techniques of multilayered object-oriented architecture with layers, MVC
architectures, and software architectures that reflect various collaborative models are described.
An example is realized using Entity framework, MVC architecture, RestFul service, PHP
programming language, .Net framework and Microsoft Visual Studio development environment.
9
1. Metodološki okvir istraživanja
1.1. Predmet i problem istraživanja
Predmet istraživanja su različite arhitekture softvera koje su u primeni u okviru distribuiranih
informacionih sistema, kao sto su višeslojne objektno – orientisane arhitekture sa slojevima (sloj
za rad sa podacima, sloj poslovne logike, servisni sloj, prezentacioni sloj), MVC arhitektura, kao
i softverske arhitekture koje podražavaju razne modele kolaboracije softvera (Publisher -
Subscribe).
1.2. Način istraživanja
U ovom radu predmet istraživanja je izučen sa teorijskog i empirijskog aspekta. U teorijskom
aspektu biće opisane osnovne definicije pojedinih tehnika u radu sa distribuiranim informacionih
sistema. U empirijskom delu biće opisana postojeća stručna rešenja i dat primer kojim se ilustruje
primena pojedinačnih tehnika.
1.3. Cilj i zadaci istraživanja
Ciljevi i rezultati istraživanja su: teorijska analiza osnovnih koncepata koji se odnose na softverske
arhitekture distribuiranih informacionih sistema, analiza postojećih naučnih i stručnih rešenja u
oblasti i komparacija rezultata, izrada prototipa veb aplikacije primenom višeslojne arhitekture i
MVC arhitekture. Cilj izrade prototipa aplikacije je ilustrovanje primene jednog od najčešće
korišćenih arhitekturnih paterna - MVC arhitekture.
1.4. Hipoteze u istraživanju
Osnovna hipoteza:
Najčešće korišćene savremene tehnologije razvoja softvera omogućavaju implementaciju softvera
kroz višeslojne arhitekture uz podršku distribuiranom procesiranju i servisno-orijentisanom
pristupu.
Podhipoteze:
Savremene tehnologije razvoja softvera omogućavaju implementaciju softvera kroz višeslojne
arhitekture.
Savremene tehnologije razvoja softvera omogućavaju implementaciju softvera uz podršku
distribuiranom procesiranju.
Savremene tehnologije razvoja softvera omogućavaju implementaciju softvera uz podršku
servisno-orijentisanom pristupu.
10
1.5. Očekivani rezultati
• Teorijski prikaz osnovnih koncepata.
• Rezultati analize stručnih rešenja primene različitih softverskih arhitektura.
• Rezultati analize naučnih istraživanja u oblasti različitih softverskih arhitektura.
• Realizovan primer softverske aplikacije koja koristi različite tehnologije i arhitekture.
1.6. Metodološki postupak
1. Naučno-metodološko koncipiranje istraživanja
2. Teorijska istraživanja
3. Analiza postojećih stručnih rešenja i naučno-istraživačkih rezultata
4. Praktična implementacija primene različitih tehnoloških elemenata
5. Sumiranje i dokumentovanje rezultata
11
2. Teorijsko istraživanje
“Softverska arhitektura računarskog sistema ili programa je struktura, koja obuhvata
softverske komponente, spoljašnje vidljive osobine ovih komponenti i relacije između njih. Termin
se takođe odnosi i na dokumentaciju softverske arhitekture sistema. Dokumentovanje softverske
arhitekture olakšava komunikaciju između svih učesnika u razvoju i omogućava ponovno
korišćenje komponenti dizajna i šablona između projekata.
Disciplina softverske arhitekture se fokusira na ideji smanjenja kompleksnosti kroz
apstrakciju i razdvajanja interesa. Danas još uvek ne postoji precizna definicija softverske
arhitekture. Postoji više desetina klasičnih i modernih tumačenja i definicija i više stotina definicija
od strane IT zajednice. Jednu interesantnu definiciju dao je Eoin Woods: Softverska arhitektura je
skup odluka o dizajnu koje, ako se ne donesu korektno, mogu dovesti do neuspeha projekta.”[11]
“Distribuirani informacioni sistemi su složeni delovi softvera od kojih su komponente po
definiciji raspoređene na više mašina. Za ovladanje složenošću neophodno da sistem bude uredno
organizam. Postoje različiti načini za organizaciju distribuiranog sistema, ali nam je važno da
napravimo razliku između logičke organizacije sakupljanja softverskih komponenti, i stvarnu
fizičku realizaciju.
Organizacija distanciranih sistema uglavnom se odnosi na softverske komponente koje
čine sistem. Ove softverske arhitekture nam govore o tome kako se organizuju različite softverske
komponente i kako treba da integrisati.
Stvarna fizička realizacija distribuiranog sistema zahteva da instanciramo i stavimo
softverske komponente na stvarne mašine. Postoji mnogo različitih izbora koji se mogu učiniti u
tome. Konačna instanca softverske arhitekture se takođe naziva sistemska arhitektura.”[1]
2.1. Stilovi softverske arhitekture
Distribuirane sistemske arhitekture su povezane sa komponentama i konektorima.
Komponente mogu biti pojedinačni čvorovi ili važne komponente u arhitekturi dok su konektori
oni koji povezuju svaku od ovih komponenti.
• Konektor: Komunikaciona veza između modula koja poređuje u koordinaciji ili saradnji
između komponenti.
• Komponenta: modularna jedinica sa dobro definisanim interfejsima; zamenljiv; ponovno
upotrebljiv.
Koristeći komponente i konektore, možemo doći do različitih konfiguracija, koje su u klasu
klasificirane u arhitektonske stilove. Do sada je identifikovano nekoliko stilova, od kojih su
najvažniji za distribuirane sisteme:
• Slojevita arhitektura (Layered Architecture).
• Objektno- orijentisana arhitektura (Object-based Architecture).
• Podacima usredsređena arhitektura (Data-centered Architecture).
12
• Arhitektura zasnovana na događajima (Event-based Architecture).
2.1.1. Slojevita arhitektura
“Layered Architecture (Složena arhitektura) razdvaja slojeve komponenti jedan od
drugog, dajući mu mnogo modularni pristup. Poznati primer za to je OSI model koji uključuje
slojevitu arhitekturu kada se sarađuju sa svakom od komponenti. Svaka interakcija je sekvencijalna
kada sloj stupi u vezu sa susednim slojem i ovaj proces se nastavlja, sve dok se ne obezbedi zahtev.
Ali u određenim slučajevima, implementacija može biti izvedena tako da se neki slojevi preskoče,
što se naziva preko granična koordinacija. Kroz koordinaciju između slojeva, mogu se postići bolji
rezultati zbog povećanja performansi. Lamele na dnu pružaju uslugu slojevima na vrhu. Zahtev se
kreće od vrha do dna, a odgovor se šalje odozdo prema vrhu. Prednost korišćenja ovog pristupa je
da pozivi uvek prate unapred definisanu stazu i da se svaki sloj može lako zameniti ili promeniti
bez uticaja na celokupnu arhitekturu.”[9]
Slika 1: Osnovna ideja slojevita arhitektura [29]
2.1.2. Objektno-orijentisana arhitektura
“Object-based architecture je zasnovana je na labavom spoju aranžmana objekata. Ne
postoji specifična arhitektura poput slojeva. Kao i kod slojeva nema sekvencijalan skup koraka
koji treba izvršiti za određeni poziv. Svaka od komponenti se naziva objekat, pri čemu svaki objekt
može da komunicira sa drugim objektima preko datog konektora ili interfejsa. Ove je mnogo
direktnije tamo gde sve različite komponente mogu imati direktnu interakciju sa drugim
komponentama putem direktnog poziva.”[9]
13
Slika 2: Osnovna ideja objektno-orijentisane arhitekture [29]
“Kao što je prikazano na gornjoj slici, komunikacija između objekta se dešava kao poziv
metode. Ove se generalno zovu Remote Call Calls (RPC). Neki popularni primeri su Java RMI,
Web Services i REST API (Application Programming Interface) pozivi. Sledeći propertiji su.
Ovaj stil arhitekture je manje strukturiran.
Komponenta = objekat.
Konektor = RPC (Remote Procedure Call) ili RMI (Remote Method Invocation).
Kada se razdvajaju ovi procesi u prostoru, ljudi žele da su komponente anonimne i
zamenljive. I proces sinhronizacije bi trebao biti asinhroni, što je dovelo do arhitekture
usredsređenih na podatke i arhitektura zasnovanih na događajima.”[9]
2.1.3. Podacima usredsređena arhitektura
“Data-centered arhitektura zasniva se na data-centru, gde se primarna komunikacija odvija
preko centralnog spremišta podataka. Ovo zajedničko spremište može biti aktivno ili pasivno. Ovo
je više kao problem potrošača u proizvodnji. Proizvođači proizvode predmete u zajedničku
prodavnicu podataka, a potrošači mogu tražiti podatke od nje. Ovo zajedničko skladište, čak je i
jednostavna baza podataka. Ali ideja je da komunikacija između objekata koji se dešavaju kroz
ovo zajedničko skladište. Ovo podržava različite komponente (ili objekte) obezbeđujući istrajni
prostor za skladištenje za te komponente (kao što je MySQL baza podataka). Sve informacije koje
se odnose na čvorove u sistemu čuvaju se u ovom istrajnom skladištu. U arhitekturi baziranim na
događaj, podaci se šalju i primaju samo od onih komponenti koje su se već́ pretplatile.
14
Neki popularni primeri su distribuirani sistemi datoteka, potrošač-proizvođač i veb usluge
bazirane na podacima.”[9]
Slika 3: Osnovna ideja podacima usteđena arhitektura [28]
2.1.4. Arhitektura zasnovana na događajima
“Kod Event-based arhitekture celokupna komunikacija u ovoj vrsti sistema se dešava kroz
događaje. Kada se generiše događaj, on će biti poslat u sistem busa. Uz to, svi ostali će biti
obavešteni govoreći da se takav događaj dogodio. Dakle, ako je neko zainteresovan, taj čvor može
izvući događaj iz busa i koristiti ga. Ponekad ovi događaji mogu biti podaci ili čak URL adrese
resursa. Dakle, prijemnik može pristupiti svim informacijama koje se daju u događaju i postupaju
u skladu s tim. Procesi komuniciraju kroz širenje događaja.
Ovi događaji povremeno prenose podatke. Prednost u ovom arhitektonskom stilu je da su
komponente labavo povezane. Zbog toga je lako dodati, ukloniti i modifikovati komponente u
sistemu. Neki primeri su izdavač - pretplatnički sistem (Publisher - subscriber sistem), Enterprise
Services Bus (ESB) i akka.io.
Jedna od glavnih prednosti je da ove heterogene komponente mogu kontaktirati busom
kroz bilo koji komunikacijski protokol. Međutim, ESB ili određena magistrala, ima mogućnost da
postupi s bilo kojom vrstom dolaznog zahteva i postupa u skladu s tim.”[9]
15
Slika 4: Osnovna ideja arhitektura zasnovana na događajima [27]
“Event-based arhitektonski stil zasniva se na arhitekturi izdavača-pretplatnika. Između svakog
čvora ne postoji direktna komunikacija ili koordinacija. Umesto toga, objekti koji su pretplaćeni
na uslugu, komuniciraju preko sabir nice događaja.
Arhitektura zasnovana na događaju podržava nekoliko stilova komunikacije.
• Publisher-subscriber.
• Broadcast.
• Point-to-Point.
Glavne prednosti ove arhitekture su da su komponente razdvojene u svemiru - labavo spojene.”[9]
2.2. Softverski arhitekturni paterni
Da bi bilo koji dizajn sistema bio uspešan, moramo odabrati definisan arhitektonski obrazac koji
je pogodan za sistem iz svakog aspekta. Arhitektonski obrazac je odabran na osnovu toga koliko
je kompatibilan sa dizajnom, koliko će biti efikasan za postizanje željenog rezultata, njegovu
ekonomičnost, vreme koje će potrošiti i resurse koji će joj trebati. Za određene projekte uzeti su u
obzir prethodno kreirani arhitektonski obrasci kako bi se dobio uvid u preferirani obrazac.
Distribuirani sistemi se sastoje od različitih hardvera i softvera (kolektivno zvane komponente)
koji komuniciraju jedni sa drugima samo putem prenosa poruka. Ove komponente se nalaze unutar
jedne mreže. Dakle, kada razmišljamo o stilovima arhitekture za distribuirane računare, glavni
zadatak bi bio da se osigura da oni mogu komunicirati jedni s drugima preko komunikacijske
mreže.
16
2.2.1. Višeslojna arhitektura
Višeslojna arhitektura (ili n-tier arhitektura) je arhitektura klijent-servera koja se koristi u
razvoju softvera, gde su vizuelizacija, upravljanje podacima i poslovna logika podeljeni u zasebne
procese. To znači da su ove različite funkcije hostirane na nekoliko mašina ili klastera,
osiguravajući da se usluge pružaju bez razmene resursa i, kao takve, ove usluge se isporučuju u
vrhunskom kapacitetu. "N" u ime n-tier arhitekture se odnosi na bilo koji broj od 1.
U objektno-orijentisanom dizajnu višeslojne arhitekture softverske podrške informacionog
sistema, najčešći su slojevi:
• Prezentacioni sloj (Presentation layer).
• Aplikativni sloj (Application layer).
• Sloj poslovne logike ( Busness layer).
• Sloj pristupa podacima (Data access layer).
Prednosti korišćenja višeslojne arhitekture:
• Sigurnost: Svaki od tri nivoa možete osigurati odvojeno koristeći različite metode.
• Jednostavan za upravljanje: Pruža mogućnost za upravljanje svakim nivoom zasebno,
dodavanjem ili modifikovanjem svakog nivoa bez uticaja na druge nivoe.
• Skalabilnost: Pruža mogućnost dodavanja više resursa, po nivou, bez uticaja na druge
nivoe.
• Fleksibilnost: Pored izolovane skalabilnosti, omogućuje proširenje svakog nivoa na bilo
koji način.
17
Slika 5: Troslojna softverska arhitektura [25]
Prema[8] u arhitekturi klijenta / servera broj nivoa zavisi od tri sloja programa, tj. Sloja
prezentacije, aplikacije / poslovne logike i sloja baze podataka. Prezentacioni sloj je najviši sloj u
bilo kojoj arhitekturi koja omogućava korisniku interakciju sa sistemom. Ona rukuje ulazima koje
korisnik daje i prikazuje izlaz na korisničkom ekranu. Primena ili poslovni logički sloj je srednji
sloj koji se sastoji od poslovnih pravila / algoritama. Ona se bavi razmenom informacija između
sloja prezentacije i sloja baze podataka. Baza podataka je donji sloj koji pruža usluge (usluge
datoteka, usluge štampanja, komunikacijske usluge i usluge baze podataka) na gornje slojeve.
Klijent / server arhitektura može biti kategorizirana kao:
➢ Jednostruka arhitektura.
➢ Dvostruka arhitektura.
➢ Troslojna arhitektura.
➢ N-tier arhitektura.
Jednostruka arhitektura
Lako je dizajnirati i implementirati jedan-tier arhitekturu, jer ne postoji razdvajanje slojeva
programa. Svi tri sloja programa su tesno povezani jedni sa drugima. Jedna tier arhitektura se
koristi kada je aplikacija jednostavna, tj. Broj korisnika je manji, a zahtevi za aplikacijama nisu
složeni.[8]
Dvostruka arhitektura
Dvostruka arhitektura je ona u kojoj klijent direktno komunicira sa serverom. Podržava
integrirano razvojno okruženje kako bi se olakšao brzi razvoj aplikacija. Gornja dva sloja (sloj
prezentacije i poslovna logika) rade zajedno, ali sloj baze podataka je odvojen od njih. Ova
arhitektura dobro funkcioniše u malom okruženju gde su korisnici ograničeni. Razvoj aplikacija
dvotirnog je manji od jedno slojnih.
Dvotirna arhitektura je najbolje u distribuiranom okruženju u kojem rade različite radne
grupe. Ali njegova performansa se smanjuje ako broj korisnika prelazi 100. Ova arhitektura ima
ograničenu fleksibilnost prilikom premeštanja funkcionalnosti programa sa jednog servera na
drugi.[8]
Tri nivoa arhitekture
Osnovano je 1990. godine kako bi se uklonile ograničenja dvosmerne arhitekture u pogledu
skalabilnosti, kompatibilnost, sistemsku administraciju, konfiguraciju i batch poslove. Treći nivo
uveden u trostruku arhitekturu je "srednji sloj servera" koji je postavljen pomoću korisničkog
interfejsa i komponente za upravljanje podacima. Funkcija srednjeg nivoa je upravljanje procesom
za izvršavanje poslovne logike i pravila. On je uklonio ograničenje arhitekture od dva nivoa tako
što je podržavao stotine korisnika istovremeno. Tri-tierna arhitektura je poželjna kada su potrebne
visoke performanse, a korisnik ne znajući za složenost distribuiranog klijent / server okruženja.
Struktura veb aplikacije može se razlikovati u skladu sa potrebama, ali po mogućnosti to je
troslojna aplikacija.[8]
18
N-tier arhitektura
N-tier arhitektura je razvijena iz arhitekture klijentskog servera. Glavni razlog za njegovu
evoluciju je podeliti aplikaciju na delove (nivoe) koji se održavaju i ovi delovi se stavljaju u stack
jednu na drugu. Na ovaj način svaki nivo je izolovan od drugog. Ažuriranje aplikacije je lako jer
promene moraju biti napravljene u jednom sloju koji nije u celoj aplikaciji. Ukoliko se neke
promene izvrše na nivou, one ne utiču na drugi nivo koji se nalazi iznad ili ispod u stacku.
Standardne objektno orijentirane tehnike se koriste za postavljanje nivoa i povezivanje nivoa
direktno u stack.[8]
Osnovna ideja n-tier arhitekture je omogućiti programu da pozove drugi program ili
aplikaciju za pozivanje druge aplikacije. Drugim rečima, postoji nekoliko delova aplikacije koji
su napravili različiti programeri, ali oni rade zajedno.[8]
2.2.2. MVC arhitektura
MVC (Model – View – Controller) je arhitekturalni patern koji se koristi za razvoj softvera.
Kada reč o programiranju, programeri često žele da razdvoje kod koje se radi sa poslovnom
logikom ili sa korisničkim interfejsom. Za olakšavanje razvoja koda je napravljen MVC
arhitektura. MVC arhitektura se koristi za izolaciju poslovne logike iz korisničkog interfejsa, on
razdvaja aplikaciju u tri glavne komponente: model, pogled i kontroler.
Slika 6: MVC arhitektura [26]
Okvir MVC-a uključuje sledeće komponente:
“ Model - Modelski objekti su delovi aplikacije koji implementiraju logiku za domen
podataka aplikacije. Često model predmeta preuzima i čuva stanje modela u bazi podataka, na
primer, objekat može preuzeti podatke iz baze podataka, raditi na njemu, a zatim upisati ažurirane
informacije natrag u tabelu proizvoda u SQL Server bazi podataka.
View - Pogledi su komponente koje prikazuju korisnički interfejs aplikacije. Tipično, ovaj
korisnički interfejs je kreiran iz podataka o modelu. Primer bi bio prikaz uređaja za tabelu
19
proizvoda koja prikazuje tekstualna polja, padajuće liste i polja za potvrdu zasnovane na trenutnom
stanju objekta proizvoda.
Controller - Kontroleri su komponente koje obrađuju interakciju korisnika (UI), rade sa
modelom i na kraju izaberu prikaz za prikazivanje prikaza korisničkog interfejsa. U aplikaciji
MVC, prikaz samo prikazuje informacije. Kontroler rukuje i odgovara na korisnički unos i
interakciju, na primer, kontroler obrađuje vrednosti upita string-a i prosleđuje ove vrednosti
modelu, koji zauzvrat mogu koristiti ove vrednosti za upite ka bazi podataka.
MVC patern pomaže omogućava da kreirate aplikacije koje odvajaju različite aspekte
aplikacije (logika ulaza, poslovna logika i UI logika), dok obezbeđuju labavu vezu između ovih
elemenata. Šablon specificira gde svaka vrsta logike treba da se nalazi u aplikaciji. UI logika
pripada pogledu. Ulazna logika pripada kontroleru. Poslovna logika pripada modelu. Ovo
razdvajanje pomaže upravljanju sa kompleksnošću prilikom izgradnje aplikacije, jer omogućava
fokusiranje na jedan aspekt implementacije u isto vreme, na primer, može se fokusirati na prikaz
bez zavisnosti od poslovne logike.
Nepravilna integracija 3 glavne komponente MVC aplikacije impliciraju potrebu za
paralelnim razvojem, na primer, jedan programer može da radi na pogledu, drugi programer može
da radi na kontrolnoj logici, a treći programer može da se fokusira na poslovnu logiku u
modelu.”[10]
MVC arhitektura je pristup koji se može koristiti u okviru različitih tehnologija i nije
fokusirana na primenu u okviru samo jednog programskog jezika. Nekoliko najpopularnijih
frameworka su: Laravel, Zend, Jango.
Kada se koristi MVC patern arhitekture ?
U okviru istraživanja [6] prikazano je da arhitektura MVC šablona daje ideju razdvajanja
aspekata, pomaže nam da provedemo razdvajanje nadležnosti između modela, prikaza i kontrolera
u okviru aplikacija. Razdvajanje briga olakšava nam testiranje naše primene jer je odnos između
različitih komponenti primene jasniji i koherentan. MVC nam pomaže da implementiramo
razvojni pristup zasnovana na testovima, u kojem implementiramo automatizovane testne pre nego
što napišemo kod. Ovi slučajevi testiranja jedinica pomažu nam da unapred definišemo i
potvrdimo zahteve novog koda pre nego što ga upišemo.
Slede smernice za odlučivanje o mogućnosti primene MVC arhitekture na osnovu analize
karakteristika i potreba aplikacije:
➢ Na našoj aplikaciji je potrebna asinhrona komunikacija na boksu.
➢ Naša aplikacija ima funkcionalnost koja rezultira neuspešnim učitavanjem punih stranica
za komentarisanje posta tokom korišćenja Facebooka ili beskonačnog skrolovanja itd.
➢ Manipulacija podataka je uglavnom na strani klijenta (pretraživač), a ne na strani servera.
➢ Isti tip podataka se dostavlja na različite načine na jednoj stranici (navigacija).
➢ Kada naša aplikacija ima mnogo beznačajnih veza koje se koriste za modifikovanje
podataka (dugme, prekidači).
20
Prednosti MVC arhitekture
➢ Arhitektura MVC nam pomaže da kontrolišemo složenost aplikacije tako što ćemo ga
podeliti u tri komponente, tj. Model, prikaz i kontroler.
➢ MVC ne koristi serverske forme, zato je idealan za one koji žele potpunu kontrolu nad
ponašanjem aplikacija.
➢ Pristup zasnovan na testiranju podržava MVC arhitektura.
➢ MVC koristi šablon prednjeg kontrolera. Šema prednjeg kontrolera rukuje višestrukim
dolaznim zahtevima pomoću jednog interfejsa (kontrolera). Prednji kontroler pruža
centralizovanu kontrolu. Moramo konfigurisati samo jedan kontroler na veb serveru
umesto mnogih.
➢ Prednji kontroler pruža bogatu komunikaciju za rutiranje podrške za dizajniranje naše veb
aplikacije.[6]
2.2.3. Komparacije višeslojne arhitekture i MVC arhitektura
Najrasprostranjenija upotreba višeslojne arhitekture je troslojna arhitektura. Troslojna
arhitektura obično se sastoji od državnog nivoa, logičkog sloja i nivoa prikaza. Višeslojna
arhitektura pruža model pomoću kojeg programeri mogu kreirati skalabilne, fleksibilne i
višekratne aplikacije. Zbog segregacije primene u nivoe, programeri mogu da izmene ili dodaju
određeni sloj, umesto da prerađuju celu aplikaciju. Glavna razlika između sloja i sloja ovde je da
se sloj odnosi na logičko razdvajanje briga dok se nivo odnosi na fizičko razdvajanje briga.[7]
Moduli troslojne arhitekture koji su korisnički interfejs (ekran), poslovna logika (logika) i
računarsko skladištenje podataka (stanje) razvijaju se i održavaju nezavisno, uglavnom na
odvojenim platformama.
Slika 7. 3-tier arhitektura
21
Ima prednost modularnog softvera sa dobro definisanim interfejsima. Bilo koja od tri nivoa
u troslojnoj arhitekturi može se nadograditi ili zameniti nezavisno sa promenama u zahtevima ili
tehnologijom. Srednji sloj može biti višeslojni za koji se ovaj arhitektonski šablon naziva
višeslojna arhitektura ili n-tier arhitektura. Protoka podataka između nivoa je deo arhitekture.
Middleware obično povezuje dva nivoa.[7]
Model Viev Controller sadrži tri komponente - View, Model i Controller.
• View je korisnički interfejs. Kao rezultat dobija podatke dobijene od kontrolera.
• Model je poslovni subjekt / podaci. Ona definiše poslovna pravila za podatke kako se
podaci mogu manipulisati ili menjati.
• Controler sadrži logiku koja vrši promene u modelu u zavisnosti od akcija koje pokreće
UI. Manipuliše podatke.
Nedostatak MVC-a je da je teško testirati jedinicu.
Kontroler ne zna ništa o pogledu, može da promeni kontrolere. Jedan kontroler može da
koristi višestruki pogled. Pregledajte prave promene učinjene na modelu, tako da su oba u
sinhronizaciji u odnosu na podatke.
Slika 8. Model View Controller.
Višeslojne arhitekture i MVC arhitekture koriste se za korisnički interaktivni dizajn
sistema. Sledeća tabela će detaljno prikazati poređenje između svakog arhitektonskog uzorka.[7]
22
Slika 9. Komparacije višeslojne i MVC arhitekture
Višeslojna arhitektura obično ima svaki sloj odvojen od strane mreže. Sloj prezentacije se
nalazi na nekim veb serverima, a zatim se govori o serverima za podršku aplikacijama preko mreže
za poslovnu logiku, a zatim se pregovara sa serverom baze podataka, ponovo preko mreže, a možda
i server za aplikacije takođe poziva neke od udaljenih servisa (recimo Authorize.net za obradu
plaćanja).
MVC je šablon programskog dizajna gde su različiti delovi koda odgovorni za
predstavljanje modela, prikaza i kontrolera u nekoj aplikaciji. Ove dve stvari su povezane jer, na
primer, sloj Model može imati unutrašnju implementaciju koja poziva bazu podataka za čuvanje i
preuzimanje podataka. Kontroler može boraviti na veb serveru i daljinski pozvati programe
aplikacija za preuzimanje podataka. MVC izvlači detalje o načinu implementacije arhitekture
aplikacije. Višeslojna arhitektura se upravo odnosi na fizičku strukturu implementacije. Ove dve
su ponekad zbunjene jer se MVC dizajn često implementira pomoću Višeslojne arhitekture.[7]
23
3. Stručno istraživanje
3.1. Komparativna analiza karakteristika MVC u raznim verzijama u
okviru .NET tehnologije
ASP.NET MVC je Microsoftov razvojni okvir koji kombinuje efikasnost i urednost
modelerske-pogled-kontrolera (MVC) arhitekture, najsavremenije ideje i tehnike iz agilnog
razvoja i najbolje delove postojećeg ASP-a .NET platforma.[4]
Slika 10: Istorija raznih verija .net- a i MVC-a [30]
MVC 1.0 je objavljen u 2009. godini. ASP.NET MVC framework izgrađen na ASP.NET
3.5, to znači da korisnici mogu iskoristiti mnoge postojeće ASP.NET 3.5 funkcije, kao što su
lokalizacija, autorizacija itd. Korisnici mogu iskoristiti MVC dizajn šeme za kreiranje Veb
aplikacije koji uključuju sposobnost da postignu i održavaju jasno razdvajanje zabrinutosti (pogled
iz logike poslovanja i aplikacije i pozadinskih podataka), kao i olakšavanje razvojnog testa.
Karakteristika ovog izdavanja programa:
• MVC arhitektura sa webform mehanizmom (MVC architecture with webform engine).
• Rutiranje (Routing).
• HTML asistent (HTML Helpers).
24
• Ajax asistent (Ajax Helpers).
• Automatsko spajanje (Auto binding).
MVC 2.0 je objavljen u 2010 godini. ASP.NET MVC framework izgrađen na ASP.NET
4.0, u ovoj verziji povećana je produktivnost prilikom pisanja ASP.NET MVC aplikacija, na
primer, Add View dialog box koristi prednosti prilagođenih šablona za generisanje koda da
generiše prikaz baziran na modelu objekta. Karakteristika ovog izdanja programa:
• Oblast (Area).
• Asinhroni kontroler (Asynchronous controller).
• Html pomocni metod sa lambda izrazom (Html helper methods with lambda
expression).
• Atributi anotacije podataka (DataAnnotations attributes).
• Validacija sa klijnetske strane (Client side validation).
• Prilagodeni šabloni (Custom template).
• Skafolding (Scaffolding).
MVC 3.0 je objavljen u 2011 godini. ASP.NET MVC framework izgrađen na ASP.NET
4.0. “ Glavna karakteristika u MVC verziji 3 je predstavljanje Razor View Engine-a. Prethodne
verzije MVC se oslanja na standardni ASP.NET mehanizam za prikazivanje, što zavisi od blokova
ASP.NET <% and %>. Razor View zamenjuje tradicionalne blokove pomoću @ karaktera. Takođe
ima fleksibilnije funkcije i omogućava bolje testiranje jedinica.“[2] Karakteristika ovog izdanja
programa:
• Nenametljiva javascript validacija (Unobtrusive javascript validation).
• Razor mehanizam prikaza (Razor view engine).
• Globalni filteri (Global filters).
• Daljinska validacija (Remote validation).
• Rešenje zavisnosti za IoC(Dependency resolver for IoC).
• ViewBag.
MVC 4.0 je objavljen u 2012 godini. ASP.NET MVC framework izgrađen na ASP.NET
4.5. “Verzija 4 MVC okvira pruža niz poboljšanja u odnosu na verziju 3. Postoje neke značajne
nove funkcije kao što su podrška za Web API aplikacije, podrška za mobilne uređaje i neke korisne
tehnike optimizacije za slanje sadržaja klijentu. Osim toga, postoji puno malih poboljšanja, kao
što je pojednostavljena sintaksa za Razorove prikaze, što je bolje organizovan sistem za pružanje
osnovnih informacija o konfiguraciji u MVC aplikacijama i neke nove šablonske opcije za Visual
Studio MVC projekte.“[3] Karakteristika ovog izdanja programa:
• Mobilni projektni šablon (Mobile project template).
• Povezivanje i minifikacija (Bundling and minification).
• Podrška za Windows Azure SDK.
MVC 5.0 je objavljen u 2013 godini. ASP.NET MVC framework izgrađen na ASP.NET
4.5. “Poboljšana je i ASP.NET verzija 4.5.1, na kojoj je izgrađen MVC Framevork 5. Najvažnija
25
promena je dodavanje API-ja identiteta ASP.NET, koji zamenjuje sistem članstva za upravljanje
korisničkim povereništvima.“[4] Karakteristika ovog izdanja programa je:
• Filteri za autentifikaciju (Authentication filters).
• Bootstrap podrška.
• Nove stavke za skafoldinga (New scaffolding items).
• ASP.NET Identitet.
MVC 5.2 je objavljen u 2014 godini. ASP.NET MVC framework izgrađen na ASP.NET
4.5. U ovom verziji programa je proširen routing atributa. Karakteristika ovog izdanja programa
je:
• Rutiranje bazirano na atributima (Attribute based routing).
• Ispravke grešaka i ažuriranje manjih funkcija.
3.2. MVC u .NET-u
Postoje dve podržane implementacije za izgradnju server-side aplikacija za .NET: .NET
Framework i .NET Core. Obojica dele mnoge iste komponente i možete podeliti kod preko dva.
Međutim, postoje dve fundamentalne razlike između njih i vaš izbor zavisi od onoga što želite da
postignete. Ovaj članak daje upite o tome kada da ih koriste.
Koristite .NET Core za poslužiteljsku aplikaciju kada:
• Cross-platformne.
• Vi ciljate mikro servise.
• Docker kontejnere.
• Potrebni su sistemi visokih performansi i skalabilnih sistema.
• Potrebne su različite verzije .NET po aplikaciji.
Koristite .NET Framework za poslužiteljsku aplikaciju kada:
• Aplikacija trenutno koristi .NET Framework (preporuka je da se proširi umesto da se
migrira).
• Vaša aplikacija koristi biblioteke .NET-a nezavisnih proizvođača ili NuGet pakete koji nisu
dostupni za .NET Core.
• Aplikacija koristi .NET tehnologije koje nisu dostupne za .NET Core.
• Aplikacija koristi platformu koja ne podržava .NET Core.[20]
26
3.2.1. .NET Framework
.NET Framework je srce Microsoft .NET. .NET Framework je platforma za razvoj softvera
Microsoft .NET. Kao i svaka platforma, ona pruža vreme rada, definiše funkcionalnost u nekim
bibliotekama i podržava skup programskih jezika. .NET Framework pruža neophodne
kompajlirane vremenske i radne vremenske osnove za izgradnju i pokretanje aplikacija zasnovanih
na .NET.
.NET Framework se sastoji od:
• Zajednički jezik Runtime.
• Klasične biblioteke.
• Podrška za višestruki programskih jezik.
Uobičajeni radni jezik (CLR) (takođe se naziva i runtime). Zajednički jezik.
Runtime (CLR) obrađuje usluge izvršavanja, uključujući integraciju jezika, sigurnost i
upravljanje memorijom. Tokom razvoja, runtime (CLR) pruža funkcije koje su potrebne za
pojednostavljenje razvoja.[22]
Glavne karakteristike dizajna su:
• Interoperabilnost: Ovo omogućava programima razvijenim od strane NET-a da pristupe
funkcionalnostima u programima razvijenim izvan .NET.
• Zajednički Runtime Engine: Zajedno poznat kao runtime u zajedničkom jeziku,
omogućava programima razvijenim u .NET da pokazuju zajednička ponašanja u korišćenju
memorije, rukovanju izuzetkom i sigurnosti.
• Nezavisnost jezika: Specifikacije jezičke infrastrukture (CLI) omogućavaju razmenu
tipova podataka između dva programa razvijena na različitim jezicima.
• Baza baznih klasa: Biblioteka koda za najčešće funkcije - koristi se od programera da bi se
izbeglo ponavljanje prepisivanja koda.
• Jednostavnost upotrebe: postoje alati za osiguranje jednostavnosti instaliranja programa
bez ometanja prethodno instaliranih aplikacija.
• Sigurnost: Programi razvijeni u .NET su bazirani na zajedničkom sigurnosnom
modelu.[21]
3.2.2. .NET Core
.NET Core je otvorena izvorna modularna platforma za kreiranje aplikacija i usluga koje
se pokreću na Windows, Linux i Mac. Podržava više jezika, kao što su C #, VB, F # i savremena
rešenja, kao što su generički, LINQ (Language Integrated Query), async razvoj i još mnogo toga.
ASP.NET Core je odličan redizajn klasičnog ASP.NET-a. To je open source i cross-
platform okvir za izgradnju internet povezanih aplikacija (web, cloud, IoT, mobile backend itd.).
27
Može da radi na .NET Core ili u potpunosti .NET Framework. Takođe je modularan tako da uvodi
minimalne troškove, jer možete uzeti samo komponente koje stvarno trebaju.
Milioni razvijača su koristili (i nastavili da koriste) ASP.NET 4.k za kreiranje veb
aplikacija. ASP.NET Core je redizajn ASP.NET 4.k, sa arhitektonskim promenama koje
rezultiraju lakšim, modularnim okvirom.
ASP.NET Core pruža sledeće prednosti:
• Jedinstvena priča za izgradnju veb UI i veb API-ja.
• Arhitektura za testabilnost.
• Razor Pages omogućavaju lakše i produktivnije scenarije fokusirane na kodiranje.
• Mogućnost razvoja i pokretanja na Windows, MacOS i Linux.
• Open-source i fokusirani na zajednicu.
• Integracija savremenih okvira na klijentskoj strani i razvojnih tokova posla.
• Sistem za konfiguraciju zasnovana na oblaku.
• Ugrađena injekcija zavisnosti.
• Laka, visoko performansa i modularna HTTP zahteva.
• Mogućnost hostovanja na IIS-u, Nginx-u, Apache-u, Dockeru ili samo-domaćinu u
sopstvenom procesu.
• Izgradnja različitih aplikacija kada ciljate .NET Core.
• Alat koji pojednostavljuje savremeni veb razvoj.
ASP.NET Core MVC je okvir za veb aplikacije zasnovana na ASP.NET Core, koji
implementira šablon model-viev-controller. MVC je sastav trećih logičkih slojeva:
• Model - poslovni sloj.
• View - sloj prikaza / prezentacije.
• Conntroller - kontrola ulaza.
Model predstavlja stanje aplikacije. Kontroler obrađuje interakcije i modifikuje model.
Kontroler takođe prenosi informacije u pogled. Pogled preuzima neophodne informacije i
predstavlja ga korisniku - daje interfejs.
ASP.NET Core je veoma fleksibilna platforma koja prati savremene obrasce, poput
injekcije zavisnosti.[21]
3.3. MVC u Javi
„Java je programskih jezik koji se koristi za izradu i razvoj velikog broja aplikacionih
softvera i njegovu implementaciju u najrazličitija multiplatformska okruženja. Java programiranje
je jedno od najzastupljenijih danas, posebno imajući u vidu veliku primenu u izradi aplikacija za
mobilne telefone i tablet uređaje kroz Android operativni sistem. Java platforme imaju široku
upotrebu u programiranju i primenjenim softverskim rešenjima, koje se kreću od najjednostavnijih
28
digitalnih uređaja, mp3 plejera, mobilnih telefona, pa sve do kompleksnih web servera i
korporativnih aplikacija.“[24]
“Java web aplikacioni okviri zasnovani na Model-View-Control (MVC) uzoru
projektovanja, poslednjih godina značajno utiču na standardizaciju aplikacione strukture i
smanjuju vreme i napor potreban za razvoj web orjentisanih informacionih sistema. Međutim, u
poslednjih nekoliko godina, zbog pojave velikog broja Java Web okvira sa različitim konceptom
strukture koje sa sobom nose određene dobre osobine i nedostatke, bitno je otežan izbor okvira za
izradu Java Web aplikacija.“[16]
3.3.1. Spring MVC
“Spring je moderan okvir za razvoj aplikacija u Javi. Njegova glavna svrha je
pojednostaviti razvoj kroz mnoge module koje Spring donosi integraciju sa različitim
tehnologijama. Spring jezgro - "bean container" - služi za povezivanje različitih aplikativnih
objekata, koji nude različite načine opisivanja konfiguracije, od kojih su najznačajnije XML
datoteke. Osim toga, Spring to radi na neinovativan način, što znači da aplikacijski objekti nisu
„svesni“ da njihov životni ciklus upravlja Spring te zbog toga mogu postojati i samostalno.”[12]
Rod Johnson je stvorio Spring framework za razvoj J2EE web aplikacije. Prva verzija
Spring frameworka objavljena je tokom 2004. Godine, a poslednja verzija 2.5 je realizovana
krajem 2007. godine.
Spring Web MVC je izvorni veb okvir izgrađen na Servlet API-u i od samog početka je
uključen u Spring Framework. Spring je poznat programerima kao dobro razvijen ekosistem. Ima
brojne dodatke, kao što su SOAP usluge, REST API-i i sigurnosna autentikacija. Jedan od
najbitnijih karakteristika ovog frameworka je što se prilikom projektovanja aplikacije koriste samo
oni moduli koji su potrebni u specifičnim slučajevima korišćenja, a ne celokupni okvir.
„Arhitektura Spring web MVC okvira zasniva se JSP Model 2 arhitekturi, tj. podrazumeva
postojanje kontroler servleta, kao centralne ulazne tačke za sve dolazeće zahteve. Ova komponenta
u Spring MVC okviru realizovana je preko klase DispatcherServlet. Sloj poslovne logike aplikacije
realizovan je preko kontroler komponente. U prezentacionom delu, Spring MVC podržava različite
tehnologije prikaza. Kao najznačajnija karakteristika prezentacionog sloja ističe se mogućnost
ostvarenja potpune nezavisnosti između poslovne logike i konkretne prezentacione
tehnologije.”[16]
3.3.2. Strust
Struts framework pomaže u razvoju veb aplikacija. Struts java framework je jedan od
najpopularnijih okvira za veb bazirane aplikacije. Java servlet, JavaBeans, ResourceBundles i
XML itd su Jakarta commons paketi koji se koriste za ostvarivanje ove svrhe. Ovo je
implementacija MVC obrazaca sa otvorenim izvorima za razvoj veb aplikacije. Karakteristike ove
vrste okvira su:
• Veća robusna ili pouzdana arhitektura.
29
• Pomaže u razvoju primene bilo koje veličine.
• Lako je dizajnirati.
• Skalabilno.
• Pouzdana web aplikacija sa Javom.
“Struts okvir je prvobitno razvijen od strane Craig R. McClanahan. On je donirao ovaj
okvir Apache fondaciji u maju 2000. godine, a Apache Software Fondacija je kompletno
realizovala Struts okvir u periodu od 2001. do 2002. godine. Apache Struts Project, danas nudi dve
glavne verzije Struts okvira. Struts 1 okvir je poznat kao jedan od najpopularnijih Java web
aplikacionih okvira. Ovaj okvir ima veliki broj dostupnih dokumenata, široko je podržan od strane
Java zajednice i predstavlja najbolji izbor za razvojne timove koji cene dokazana rešenja za
uobičajene probleme. Struts 2 okvir je nastao kao rezultat nezavisnog rada zajednice WebWork2
okvira i Struts 1 okvira. Struts 2 okvir predstavlja izbor za razvojne timove koji rešavaju teže
probleme. Danas je Struts postao standard za izgradnju web aplikacija u Java programskom jeziku
i prihvaćen je širom Java zajednice. Najvažniji razlog za njegovu popularnost je jednostavnost
arhitekture i njegova uska integracija sa J2EE platformom.” [16]
3.4. MVC u PHP-u
PHP je široko korišćeni open source skripting jezik za generalnu upotrebu. Prvi put se
pojavio kao alat pod nazivom ,,Personal Home Page tools’’, i on je pomagao korisnicima oko
rešavanja problema vezanim za održavanje i kreiranje veb stranica. Vremenom se pokazao kao
veoma dobar i koristan, a ubrzo je postao potpun jezik kao što je danas menjajući naziv u PHP –
Hypertext Preprocessor.
PHP je serverski jezik, što znači da se sve skripte izvršavaju na web serveru kao i da se
vraćaju rezultati skripte korisniku putem HTTP protokola. Za razliku od PHP-a, JavaScript je
client-side skriptni jezik što bi značilo da se njegov kod izvršava samo na klijentskom računaru u
njegovom web browseru. Isto kao i PHP, JavaScript doprinosi dinamičkom aspektu web stranice,
na primer kada se vrše preuzimanja rezultata sa određenog izvora podataka, javlja se razlika
između server-side skripti i client-side skripti. Činjenica je da ukoliko se koristi PHP/server-side
način preuzimanja podataka, navedeni podaci se preuzimaju dok se skripta izvršava na serveru,
oni se obrađuju i nakon obrade vraćaju samo oni koji podaci koji zadovoljavaju određene
kriterijume (uslove). Kod client-side načina, pošto se kod izvršava na klijentskom računaru (kao
što je napomenuto), korisnici sa malim predznanjem ovog jezika sa određenim alatima imaju
mogućnost izmene JavaScript koda unutar pristigle HTML stranice i na taj način mogu narušiti
sigurnost same aplikacije ili steći uvid u njeno interno funkcionisanje koje može dovesti do raznih
zloupotreba.
Postoji nekoliko popularnih PHP razvojnih okruženja, na primer: Symfony, Laravel,
CakePHP, koji prate Model View Controller (MVC), koji razdvaja poslovnu logiku iz korisničkog
interfejsa, čineći kod čist i proširiv. PHP je odličan jezik za razvoj web-a i pruža veliki broj alata
i biblioteka. PHP razvojna okruženja dolaze sa određenim bibliotekama, one pomažu za kreiranje:
30
• Validacija formulara (Form Validation).
• SOAP/REST API.
• Mehanizam keširanja (Caching Mechanism).
• Ulazno / izlazno filtriranje (Input/Output Filtering).
• Rukovanje podacima s JSON-om (Data Handle With JSON).
• Apstrakcija baze podataka (Database Abstraction).
• Sesija i rukovanje kolaèiæima (Session and Cookie Handling).
3.4.1. Laravel
Prema istraživanju SitePoint-a se može videti da je Laravel najpopularnije php razvojno
okruženje.[31]
Tailor Otvell je stvorio Laravel kao pokušaj da obezbedi napredniju alternativu za
CodeIgniter, koji nije pružio određene funkcije kao što je ugrađena podrška za autentikaciju
korisnika i autorizaciju. Prva verzija Laravela je objavljena 9. juna 2011. godine, ovo je bila beta
verzija Laravel-a, kasnije istog meseca su objavili Laravel 1. Poslednja verzija Laravela 5.7 je
objavljena 4. Septembra 2018.
Laravel je besplatno PHP razvojno okruženje otvorenog koda (open source) za kreiranje
web aplikacije korišćenim MVC obrasca i zasnovana na Symony-u. Karakteristika Laravela su
modularni sistemi za pakovanje sa namenskim menadžerom zavisnosti, različiti načini pristupa
relacijskim bazama podataka, uslužnim programima koji pomažu u primeni.
Aplikacije Laravela prate tradicionalni šablon Model-View-Controller, gde se koriste:
• Controller – koristi se za rukovanje korisničkim zahtevima i za preuzimanje
podataka, koristeći modele.
• Model – koristi se za interakciju sa bazom podataka i preuzimanje podataka o
objektima.
• View - koristi se za prikazivanje stranica.
3.4.2. Symfony
Symfony je PHP razvojno okruženje otvorenog koda (open source) za web aplikacije. Prva
verzija Symfony-a (Symfony 1.0) je objavljena juna 2007. godine a poslednja verzija (Symfony
4.1) je objavljena u maju 2018. godine.
Symfony je skup više komponenti PHP-a koji omogućavaju programeru da kreira
skalabilne aplikacije visokih performansi. Sa 30 komponenti iz koje se može izabrati, programer
ima potpunu slobodu da eksperimentiše i radi u RAD okruženju. Simfony API takođe omogućava
jednostavnu integraciju sa aplikacijama nezavisnih proizvođača i mogu se koristiti sa popularnim
okvirima front-end, kao što je AngularJS.
31
U Symfony-u ima mogućnost da se koristi MVC arhitekture, ali više se koristi kao HTTP
framework, Symfony je Request/Response razvojno okruženje.
3.5. SOA arhitektura
“Servisno orijentisana arhitektura se može definisati kao IT arhitektura koja podržava
transformaciju poslovnog okruženja u skup međusobno labavo povezanih servisa koji između sebe
komuniciraju tako što razmenjuju poruke ili koordiniraju neku aktivnost i time obezbeđuju
zaokružen tok poslovnih procesa koje podržavaju. U osnovi, priča o SOA je optimalno i efikasno
usaglašavanje poslovanja i informatičkih tehnologija koje ga podržavaju.
IT infrastruktura u velikoj meri podržava poslovne procese kompanija, ali cilj je da ona
bude fleksibilna u tolikoj meri da relativno lako podrži transformaciju poslovnih procesa u skup
povezanih servisa odnosno ponovljivih poslovnih funkcija kojima se može pristupiti ukoliko je
potrebno i kroz mrežu. Servisno orijentisana arhitektura pravi aplikacije pomoću gotovih
softverskih servisa čije su funkcionalnosti potpuno nezavisne jedne od drugih i u kojima se ne
nalaze ugrađeni pozivi za povezivanje.“[15]
Do sad ne postoji standarda ili zvanična definicija za SOA. IBM definisao kao “Služba
orijentirana arhitektura (SOA) je poslovni pristup IT-arhitekturi koji podržava integraciju vašeg
poslovanja kao povezanih, ponovljivih poslovnih zadataka ili usluga.“[13]
3.5.1. Web servisi SOAP i Restful
Veb servisi, u veoma širokom smislu, predstavljaju metode komunikacije između dve
aplikacije ili elektronskih uređaja preko World Wide Web (WWW). Postoje dve vrste veb servera:
Simple Object Access Protocol (SOAP) i Representational State Transfer (REST).
SOAP definiše standardni komunikacijski protokol (skup pravila) za XML razmenu
poruka. SOAP koristi različite transportne protokole, kao što su HTTP i SMTP. Standardni HTTP
protokol olakšava SOAP modelu da tunel kroz zaštitne zidove i proksije bez ikakvih modifikacija
SOAP protokola. SOAP ponekad može biti sporiji od tehnologija srednjeg softvera kao što je
CORBA ili ICE zbog njegovog verbalnog XML formata.[14]
REST opisuje skup arhitektonskih principa pomoću kojih se podaci mogu preneti preko
standardizovanog interfejsa (kao što je HTTP). REST ne sadrži dodatni sloj razmene poruka i
fokusira se na pravila dizajna za kreiranje usluga bez državljanstva. Klijent može pristupiti resursu
koristeći jedinstveni URI i vraćanje reprezentacije resursa. Sa svakom novom predstavom resursa,
klijentu se kaže da prenosi stanje. Dok pristupa RESTful resursima sa HTTP protokolom, URL
resurs služi kao identifikator resursa, a GET, PUT, DELETE, POST i HEAD su standardne HTTP
operacije koje se obavljaju na tom resursu.[14]
Glavna prednost Veb servisa je da njegovi potrošači mogu koristiti uslugu bez znanja o
detaljima njegove implementacije, kao što su hardverska platforma, programskih jezik, objektni
32
model i sl. Veb server pruža slobodni spoj između heterogenih sistema uz pomoć XML poruka,
obezbedi interoperabilnost.
Veb serveri su dizajnirani da obezbede infrastrukturu za razmenu poruka neophodnih za
komunikaciju na različitim platformama koristeći industrijske standarde. Veb servisi takođe
koriste asinhronu komunikaciju kako bi rešili problem latencije koji se javlja zbog zahteva
udaljenih lokacija na Internetu. Ovo omogućava izvršavanje pozadinskih zadataka za klijenta (kao
što je reagovanje na interakcije korisnika) sve do stvarnog završetka zahteva za Veb uslugom.
➢ .NET
ASP.NET pruža okvir koji se može lako koristiti za izgradnju Veb servisa fokusiranjem na
logiku aplikacije, a ne na hardveru koji je potreban za pisanje infrastrukturnog koda za
komunikacijski protokol ili za transport poruka. Veb usluge kreirane u ASP.NET-u mogu da
koriste funkcije iz .NET okvira kao što su keširanje, autentikacija i upravljanje državom. Veb
servis koristi ekstenziju ".asmx" pomoću @Veb servisne direktive (na vrhu fajla) prema ASP.NET
modelu primene. Može biti samostalna aplikacija ili pod komponenta veće Veb aplikacije. Veb
servis u kontekstu .NET je komponenta koja se nalazi na Veb serveru i pruža informacije i usluge
drugim mrežnim aplikacijama koristeći standardne Veb protokole kao što su HTTP i Simple
Object Access Protocol (SOAP).
.NET Veb servisi pružaju asinhronu komunikaciju za XML aplikacije koje rade preko
okvira komunikacije .NET. Postoje tako da korisnici na Internetu mogu da koriste aplikacije koje
ne zavise od njihovog lokalnog operativnog sistema ili hardvera i uglavnom se zasnivaju na
pretraživačima.
➢ Java
Veb servisi su nezavisni od platforme. To znači da se veb servis može razviti na velikom
broju jezika koji se pokreću na mnogim platformama. platforma Java i Java2 Enterprise Edition
(j2EE) pružaju funkcije od izgradnje i primene Veb usluga. Prednosti jezika Java i J2EE platforme
su nezavisnost proizvođača i potrošnja aplikacija. Aplikacije koje su izgrađene na J2EE platformi
mogu biti primenjene na implementaciji J2EE od velikog broja proizvođača. Korišćenje Java-a za
razvoj Veb servisa omogućava da prednost nezavisnosti proizvođača pored nezavisne platforme i
nezavisnosti veb usluga. Java ima podršku za Veb usluge preko paketa Java Veb Services
Developer Pack (JVSDP). JESDP sadrži biblioteke za generisanje XML-a i SOAP-a, obradu
XML-a, pristup registrima usluga i pozivajući RPC-bazne Veb usluge. [5]
➢ PHP
PHP je poznat kao programskih jezik u Veb 2.0 eri koji omogućuje razvoj agilnog softvera
na serveru. Postoji mnogo okvira i alata u PHP-u koji mogu pomoći korisnicima da grade RESTful
aplikacije. Postoji nekoliko PHP frejmworka koji nam pomažu u kreiranju RESTful aplikacije, na
primer: Tonic, Konstrukt, Zend Framework.
33
Tonic je open-source RESTFul za razvoj veb aplikacija PHP biblioteka. Dizajniran je tako
da korisnik može napraviti RESTFul aplikacije na pravi način. Koncept resursa se daje značajno,
a biblioteka daje programeru slobodu da kreira aplikaciju.
Konstrukt je RESTFul okvir kontrolera za PHP5. Kontroleri su resursi i mapiranje URI-do-
kontrolera daje aplikaciji logičku strukturu. Okvir otkriva HTTP metode programeru i omogućava
programeru da prilagodi aplikaciju onako kako on želi.
34
4. Rezultati naučno-stručnih istraživanja
U ovom delu smo fokusirali na programskih jezik C#, PHP i Java. Istraživanje je podeljeno
na:
4.1. Popularnost programskih jezika
U ovom delu ćemo pogledati najpopularnije programske jezike u 2018 godini. Za to ćemo
ispitivati tri popularna veb sajta, a to su :
• Tiobe Programming Index.
• Indeed.com.
• GitHub.
Tiobe Programming Index
Decenijama, Tiobe (kompanija za kvalitet softvera) generisala je indeks najpopularnijih
programskih jezika. Oni ažuriraju ovu listu mesečno, izvlačući podatke iz stotina izvora širom
sveta. [17]
Slika 11. Najbolji programskih jezici[17]
Gornji grafikon pokazuje 20 najpopularnijih programskih jezika od decembra 2017. Svi
jezici zajedno ukupno 100%. Tiobe faktori u varijablama kao što je broj profesionalnih programera
širom sveta, kursevi obuke i proizvođači trećih strana. Većina ovih informacija dolazi od analize
35
rezultata pretraživača. U ovom istraživanju možemo videti da je najpopularniji programskih jezik
Java sa njegovom 13,27%. Programski jezik C# na petom mestu sa 2,82% , programskih jezik
PHP na devetom sa 1,59%.[17]
Indeed.com
Kao najveći svetski pretraživač za posao, zapravo predstavlja dobro merenje najzahtevnijih
programskih poslova.[17]
Slika 12. Najtraženiji jezici[17]
Ovaj grafikon prikazuje najtraženije poslove po Indeed.com-u. U ovom istraživanju je
preuzeto 50 najpopularnijih jezika iz indeksa Tiobe i tražili "(" Jezik ") Developer". Ima smisla da
su najpopularniji jezici najviše otvoreni za rad. U ovom istraživanju možemo videti da su
najtraženiji Java programeri, na treću mestu su C# programeri a na sedmom mestu su PHP
programeri.[17]
GitHub
GitHub je jedno od najvećih korpusa kodova koji se danas koriste. Svake godine kreiraju
izveštaj o pregledu godine, deleći statistiku o svojoj programerskoj zajednici.[17]
36
.
Slika 13. Najtraženiji zahtev [15]
Github Godina u pregledu nam daje najviše 15 zahteva za povlačenje iz svoje zajednice.
Zahtevi za povlačenjem su indikator količine koda koji se piše. U ovom istraživanju Java je na
trećom mestu nakon toga PHP je na petom mestu i C# na osmom mestu.[17]
U odnosu na istraživanje Java je najpopularniji programskih jezik, nakon toga je C# i PHP.
4.2. Statistika korišćenja Veb servisa
REST API se u velikoj meri smatra standardnim protokolom za veb API-je. Dok drugi
protokoli koji se koriste za Veb API su manje popularni od REST API-ja. SOAP i JavaScript su
manje popularni od REST-a. REST API raste brzo od 2006. Razvijači se oslanjaju na ovaj API jer
je lako razumeti od ostalih. Stopa rasta i korišćenja REST API je veća od ostalih. Postoje razni
grafikoni dostupni na različitim lokalitetima šteti stopu rasta odmora API od 2006. do 2011. godine
je veća nego bilo koji drugi API.[19]
Sa šanse da je jedna stvar povećala širok odgovor; to su standardi RESTful. Oni su u
početku predstavili Roi Fielding u poglavlju 5 njegovog rada o mrežnim softverskim
arhitekturama. Jedan od razloga za popularnost REST API je razumljiv i lak za programere da
kodiraju na njemu. Razvijanje REST API-a je lakše od ostatka kada je vaš stvarni fokus na
podacima.[19]
Clai Loveless, bivši CTO Masheri-a, održao je prezentaciju "Lekcije od neuspeha SOAP-
a" na Glue Con 2011, deljenje nekih statističkih podataka sa programabilnog Veba, indeksiraoca
API izvora, pokazujući da je SOAP rastao tokom godina, ali ima manji udeo od REST-a, koji je
imao konzistentan rast. [18]
37
Slika 14.Osnovu direktorijuma od 3.200 veb API-a navedenih u programu ProgrammabledWeb, May 2011[18]
4.3. Najbolji alati za testiranje API
“API testiranje (Testiranje interfejsa aplikativnog programiranja) je tip testiranja softvera
koji se fokusira na određivanje da li razvijeni API-ovi ispunjavaju očekivanja u pogledu
funkcionalnosti, pouzdanosti, performansi i sigurnosti aplikacije.
Interesovanje za testiranje API / Veb servisa stalno raste u poslednjih nekoliko godina,
prema Google Trendovima. Istraživanje kompanije Smartbear preko 5.000 profesionalaca iz 2017.
godine pokazalo je da će se u naredne dve godine očekivati povećanje broja API testera koji
automatizuju više od 50% svojih testova za 30% (sa 59% na 77%). Pored toga, 80% ispitanika je
izjavilo da su odgovorne za neke API testove.
38
Slika 15. Pet najbolje alati za testiranje API
1. SoapUI
SoapUI je funkcionalno testiranje alata namenjeno API testiranju, omogućavajući
korisnicima da jednostavno testiraju REST i SOAP API i Veb usluge. Slobodni paket: Koristeći
besplatni paket SOAP UI, korisnici mogu dobiti kompletan izvorni kod i napraviti svoje željene
funkcije. Kreirajte test brzo i jednostavno pomoću povlačenja i ispuštanja, Point-and-click.
Ponovna upotreba skripte: testovi opterećenja i skeniranja bezbednosti mogu se ponovo koristiti
za funkcionalne testove u nekoliko koraka.
2. Katalon
Katalon Studio je besplatan alat za automatizaciju testova za API, Veb i Mobilne aplikacije.
Ona se pojavljuje kao vodeće sredstvo za testiranje API / Veb servisa i pozicionira se kao
sveobuhvatno rešenje za automatizaciju od kraja do kraja kako za programera tako i za testere.
Katalon Studio podržava SOAP i REST zahteve sa različitim vrstama komandi i funkcijama
parametriranja. Štaviše, mogućnost kombinovanja UI i API / Veb usluga za više okruženja
(Windows, Mac OS i Linux) se smatra jedinstvenom prednosti Katalon Studioa među top API
alatima.
3. Postman
Pošto je prvobitno Chrome plugin, Postman sada proširuje svoje rešenje sa izvornom
verzijom za Mac i Windows. Poštar je dobar izbor za API testiranje za one koji ne žele da se bave
kodiranjem u integrisanom razvojnom okruženju koristeći isti jezik kao i programeri.
4. Tricnetis Tosca
Tricentis Tosca je neprekidna platforma za testiranje za Agile i DevOps.
39
5. Apigee
Apigee je alat za testiranje API-a za unakrsni oblak, omogućavajući korisnicima da mere i
testiraju performanse API-ja, podržavaju i grade API pomoću drugih urednika poput Svagger-
a.“[23]
40
5. Implementirano rešenje
5.1. Opis poslovnog konteksta
Primer poslovnog procesa koji je izabran za ilustrovanje primerima implementacije
kompanija koja pruža usluge strimovanja multimedijalnog sadržaja preko interneta.
Studio ima mogućnost da dodaje nove filmove. Korisnik ima mogućnost da pregleda sve
dostupne filmove iz baze. I nakon plaćanja ima mogućnost da pogleda odabrani film. Nakon toga
korisnik ima mogućnost da da povratne informacije i utiske o filmu, ove podatke veb sajt prikaže
na veb stranici da bi ostali korisnici imali mogućnost da pročitaju utisak pre naručivanja filma i
slanja nazad utiska za studio.
5.2. Cilj i opis korišćenih tehnologija
Tehnologije koje su korištene u realizaciji primera su: Visual Studio 2017, Entity
framework.
5.2.1. Microsoft Visual Studio 2017
“Microsoft Visual Studio je programska sredina stvorena za izradu kompjuterskih
programa za Microsoft Windows. Takođe se koristi i za izradu web sajtova kao i web i mobilnih
aplikacija. Visual studio koristi platforme kao što su: Windows API, Windows Forms, Windows
Presentation Foundation, Windows Store i Microsoft Silverlight.
Visual Studio sadrži kod editor sa integrisanim debugger-om. Druge alatke su kod
profajler, forms designer za izradu aplikacija, web designer aplikacije i druge alatke. Pored alatki
i osnovnih funkcionalnosti, moguće je instalirati i plugin-ove za poboljšavanje funkcionalnosti.
Visual Studio podržava 36 različitih programskih jezika i dozvoljava kod editoru i
debugger-u da ih menjaju. Ugrađeni programskih jezici su C, C++ i C++/CLI (via Visual C++),
VB.NET (via Visual Basic .NET), C# (via Visual C#), F# i TypeScript. Drugi jezici kao što su
Python, Ruby, Node.js i M je moguće dodati. Podržava i XML/XSLT, HTML/XHTML, JavaScript
i CSS.“[41]
5.2.2. Entity Framework
Entity Framework 6 (EF6) je testiran i testiran objekt-relacijski mapper (O / RM) za .NET
sa dugogodišnjim razvojem i stabilizacijom funkcija. Kao O / RM, EF6 smanjuje neusklađenost
impedancije između relacionog i objektno orijentisanog sveta, omogućavajući programerima da
napišu aplikacije koje međusobno deluju sa podacima koji se čuvaju u relacijskim bazama
podataka koristeći jako otkucane .NET objekte koji predstavljaju domen aplikacije i eliminišu
potrebu da veliki deo pristupa podacima "vodovod" koji obično treba da pišu.
EF6 implementira mnoge popularne O / RM funkcije:
41
• Mapiranje klasa POCO entiteta koje ne zavise od bilo koje vrste EF.
• Automatsko praćenje promena.
• Rezolucija identiteta i Jedinica rada.
• Poželjno, lenjivo i eksplicitno učitavanje.
• Prevod jako upisanih upita pomoću LINQ-a (Language INtegrated Query).
• Mogućnosti bogatog mapiranja, uključujući podršku za:
One-to-one, one-to-many i many-to-many odnosima.
• Nasleđivanje (tabela po hijerarhiji, tabela po tipu i tabeli po konkretnoj klasi).
• Složeni tipovi.
• Iskustvo "Code First" za stvaranje entitetskih modela pisanjem koda..
• Integracija sa aplikacijskim modelima .NET Framework-a, uključujući ASP.NET, i preko
baze podataka, sa WPF i WinForms.
5.3. Korisničko uputstvo
Implementiran je deo programa koji se odnosi na unos i ažuriranje podataka o filmovima.
Ovaj deo softvera je realizovan u ASP.NET MVC-u. Pored MVC forme postoji i javan API. u
narednom radu je prikazan kako se radi sa API-om i PHP aplikacija koja koristi javni API ovog
programa.
U ovom odeljku je dat izgled osnovnog ekrana za unos podataka. Ostale softverske funkcije
veb aplikacije nisu realizovane.
Slika 16. Unos novog filma
42
5.4. Opis implementacije
5.4.1. Kreiranje MVC projekta
5.4.1.1. Model
Model je jedan od osnovnih delova MVC arhitekture. Nakon kreiranje projekata, u
Solution Explorer-u dobijemo fajl koja se naziva Model. U ovom fajlu kreiramo dve klase. Prva
klasa se naziva “Film“ a druga je “Zanr“. U ovim klasama se nalaze svojstva(property).
using System;
using System.ComponentModel.DataAnnotations;
namespace MasterRad2018.Models
{ public class Film
{
public int Id { get; set; }
[Required]
public string Naslov { get; set; }
public string Opis { get; set; }
public Zanr Zanr { get; set; }
[Required]
[Display(Name = "Žanr")]
public byte ZanrId { get; set; }
public DateTime DatumDodavanja { get; set; }
public DateTime DatumIzlaska { get; set; }
}} Listing br. 1 Kod za klasu, ”Film"
using System.ComponentModel.DataAnnotations;
namespace MasterRad2018.Models
{
public class Zanr
{
public byte Id { get; set; }
[Required]
[StringLength(255)]
public string Ime { get; set; }
}} Listing br. 2 Kod za klasu ,”Zanr"
5.4.1.2. Kreiranje baze podataka pomoću Entity Framework-a
U ovom radu iskorišten je Code-first pristup. Code-first radi tako sto Entity Framework
generiše modele i mape u toku izvršavanja na osnovu entitetskih klasa i dodatne konfiguracije
modela. Pomoću Package Manager -a smo dodavali novu migraciju nakon toga EF(Entity
Framework) iz čita iz klase “Film“ i “Zanr“ svojstva (property) i generiše kod. Pomoću ovog koda
EF kreira tabelu “Film“ i tabelu “Zanr“.
public partial class DodajFilmZanr : DbMigration
{
43
public override void Up() {
CreateTable(
"dbo.Zanrs",
c => new
{
Id = c.Byte(nullable: false),
Ime = c.String(nullable: false, maxLength: 255),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.Films",
c => new
{
Id = c.Int(nullable: false, identity: true),
Naslov = c.String(nullable: false),
Opis = c.String(),
ZanrId = c.Byte(nullable: false),
DatumDodavanja = c.DateTime(nullable: false),
DatumIzlaska = c.DateTime(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Zanrs", t => t.ZanrId, cascadeDelete: true)
.Index(t => t.ZanrId);
}
public override void Down() {}
Listing br. 3 Kod za migraciju
5.4.1.3. Controller
U ovom delu koda se nalaze metode za kreiranje brisanje, ažuriranje i dodavanje novih
filmova. Za komunikaciju sa bazom koristimo Entity Framework i LINQ.
using MasterRad2018.Models;
using MasterRad2018.ViewModel;
using System;
using System.Data.Entity;
using System.Linq;
using System.Web.Mvc;
namespace MasterRad2018.Controllers
{
public class FilmoviController : Controller
{
private ApplicationDbContext _context;
public FilmoviController()
{
_context = new ApplicationDbContext();
}
protected override void Dispose(bool disposing)
{
_context.Dispose();
}
44
public ActionResult Novo()
{ var zanrs = _context.Zanrs.ToList();
var viewModel = new FilmViewModel
{
Zanrovi = zanrs
};
return View("FilmForm", viewModel);
}
public ActionResult Urediti(int id)
{
var film = _context.Film.SingleOrDefault(m => m.Id == id);
if (film == null)
return HttpNotFound();
var viewModel = new FilmViewModel()
{
Film = film,
Zanrovi = _context.Zanrs.ToList()
};
return View("FilmForm", viewModel);
}
[HttpPost]
public ActionResult Snimi(Film film)
{
if (film.Id == 0)
{
film.DatumDodavanja = DateTime.Today;
_context.Film.Add(film);
}
else
{
var filmUDb = _context.Film.SingleOrDefault(m => m.Id == film.Id);
filmUDb.Naslov = film.Naslov;
filmUDb.DatumIzlaska = film.DatumIzlaska;
filmUDb.ZanrId = film.ZanrId;
filmUDb.Opis = film.Opis;
}
_context.SaveChanges();
return RedirectToAction("Index", "Filmovi");
}
public ViewResult Index()
{
var film = _context.Film.Include(m => m.Zanr).ToList();
return View(film);
}
public ViewResult Index2()
{
return View();
}
}
}
Listing br. 4 Kod za “FilmoviController"
45
5.4.1.4. View
U View kreiramo klasu FilmForm. Ova klasa služi za dodavanje i ažuriranje filmova.
Koristi se standardna MVC forma.
@model MasterRad2018.ViewModel.FilmViewModel
@{
ViewBag.Title = "FilmForm";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Novo</h2>
@using (Html.BeginForm("Snimi", "Filmovi"))
{
<div>
@Html.LabelFor(m => m.Film.Naslov)
@Html.TextBoxFor(m => m.Film.Naslov, new { @class = "form-control" })
</div> <div>
@Html.LabelFor(m => m.Film.Opis)
@Html.TextAreaFor(m => m.Film.Opis, new { @class = "form-control" })
</div> <div>
@Html.LabelFor(m => m.Film.DatumIzlaska)
@Html.TextBoxFor(m => m.Film.DatumIzlaska, "{0:d MMM yyyy}", new { @class = "form-control" })
</div> <div>
@Html.LabelFor(m => m.Film.ZanrId)
@Html.DropDownListFor(m => m.Film.ZanrId, new SelectList(Model.Zanrovi, "Id", "Ime"), "Izaberi", ne
w { @class = "form-control" })
</div> <div> </div>
@Html.HiddenFor(m => m.Film.Id)
<Button class="btn btn-primary" type="submit">Snimi</Button>
} Listing br. 5 Kod za prikaz "FilmForm"
5.4.2. RESTFul servis
5.4.2.1. Kreiranje RESTFul servisa
Kreiranje RestFul servisa izgleda tako da u folderu Controllers kreiramo jedan novi folder
koja se zove API. U ovom folderu kreiramo jednu Web API 2 Controller klasu. Nova klasa se
nasleđuje iz klase APIControler. Da bih naš program radio moramo da koristimo RESTful
konverziju. U konverziji su Get, Post, Put, Delete komande.
Zahtev Opis
GET/API/filmovi Uzmi sve filmove
GET/API/filmovi /1 Preuzmite film sa ID-om 1
46
POST/API/filmovi Dodaj novi film
PUT/API/filmovi /1 Ažuriraj film sa ID-om 1
DELETE/API/filmovi /1 Izbrišite film sa ID-om 1
U Slučajima kada imamo povratak akcije kontrolera možemo da koristimo
IHttpActionResult. U ovim slučajevima imamo pomoćne metode:
• NotFound().
• Ok().
• Created().
• Unauthorized().
using MasterRad2018.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web.Http;
namespace MasterRad2018.Controllers.Api
{
public class FilmoviController : ApiController
{
private ApplicationDbContext _context;
public FilmoviController()
{
_context = new ApplicationDbContext();
}
public IEnumerable<Film> GetFilmovi()
{
return _context.Film
.Include(m => m.Zanr)
.ToList();
}
public IHttpActionResult GetFilm(int id)
{
var film = _context.Film.SingleOrDefault(c => c.Id == id);
if (film == null)
return NotFound();
return Ok(film);
}
[HttpPost]
public IHttpActionResult CreateFilm(Film film)
{
film.DatumDodavanja = DateTime.Today;
_context.Film.Add(film);
_context.SaveChanges();
47
return Created(new Uri(Request.RequestUri + "/" + film.Id), film);
}
[HttpPut]
public IHttpActionResult UpdateFilm(int id, Film film)
{
var filmUDb = _context.Film.SingleOrDefault(c => c.Id == id);
if (filmUDb == null)
return NotFound();
filmUDb.Naslov = film.Naslov;
filmUDb.Opis = film.Opis;
filmUDb.ZanrId = film.ZanrId;
filmUDb.DatumIzlaska = film.DatumIzlaska;
_context.SaveChanges();
return Ok();
}
[HttpDelete]
public IHttpActionResult DeleteFilm(int id)
{
var FilmUDb = _context.Film.SingleOrDefault(c => c.Id == id);
if (FilmUDb == null)
return NotFound();
_context.Film.Remove(FilmUDb);
_context.SaveChanges();
return Ok();
}
}
}
Listing br. 6 Kod za kreiranje Film API-a
48
5.4.2.2. Kontrolisanje RESTFul API-a
Nakon završetka programa moramo konstatovati da li je naš API radi kako treba. Za
kontrolisanje API-a koristićemo jedan besplatan alat Postman. Program nam omogućava da
šaljemo zahteve ka serveru.
Slika 17 Prikaz podataka pomoću API-a
Nakon slanja GET zahteva možemo videti da nam je program ispisao sve filmove koji se
nalaze u bazi. Sličnim zahtevom možemo dodati novi film.
49
Slika 18 Unos podataka pomoću API-a
Možemo videti da posle slanja GET zahteva novi film će se prikazati u listu MVC view
formi.
Slika 19 Prikaz svih unetih podataka
50
5.4.2.3. Kreiranje prikaza
Na stranici je prikazana implementacija servisa. Na stranici koristimo Ajax i JQuery
DataTables plug-in. AJAX omogućava asinhrono ažuriranje veb stranica razmenom podataka sa
veb serverom iza scene. To znači da je moguće ažurirati delove veb stranice bez ponovnog
punjenja cele stranice. JQuery DataTables plug-in se koristi za prikaz podataka.
Slika 20 Prikaz podatka pomoću API-a
@model IEnumerable<MasterRad2018.Models.Film>
@{
ViewBag.Title = "Film";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Filmovi</h2>
<table id="filmovi" class="table table-bordered table-hover">
<thead>
<tr>
<th>Film</th>
<th>Žanr</th>
</tr>
</thead> <tbody> </tbody>
</table>
@section scripts
{ <script>
$(document).ready(function () {
var table = $("#filmovi").DataTable({
"language": {
"url": "//cdn.datatables.net/plug-ins/1.10.19/i18n/Serbian.json" },
ajax: {
url: "/api/filmovi",
51
dataSrc: ""
},
columns: [
{
data: "naslov",
render: function (data, type, film) {
return "<a href='/Filmovi/Urediti/" + film.id + "'>" + film.naslov + "</a>";
} },
{
data: "zanr.ime"
} ] }); }); </script>} Listing br. 7 Kod za prikaz podataka pomoću API-a
5.4.3. Povezivanje PHP aplikacije sa veb serverom
Osnovna ideja je bila da nakon kreiranja javnog API-a da jedan nezavisan program to koristi. U
Ovom slučaju je to jedna PHP aplikacija. Aplikacija ima mogućnost da prikaže osnovne podatke
koji se nalaze u MVC projektu i da se prikaže detalje.
<?php
$get=file_get_contents("http://localhost:57546/Api/filmovi");
$json=json_decode($get);
$i=0;
echo "<table style=width:70%>";
echo" <tr>";
echo"<th> br.</th>";
echo"<th>Naslov</th>";
echo"<th>Žanr</th>" ;
echo"<th style=width:8%>Više</th>";
echo"</tr>";
foreach ($json as $json) {
$zanr=$json->zanr->ime;
$i++;
echo "<tr>";
echo "<td>$i</td>";
echo "<td>$json->naslov</td>";
echo "<td>$zanr </td>";
echo "<td><a class='button' href='vise.php?details=$json->id'>Više</a></td>";
echo "</tr>";
} echo "</table>";
?> Listing br. 8 Kod za prikaz podataka pomoću php-a
<?php
$id = $_GET['details'];
$location='http://localhost:57546/Api/filmovi/';
$location.=$id; $get=file_get_contents($location);
$json=json_decode($get);
echo "<table style=width:50%>"; echo" <tr>";
echo"<td class='cls'>Naslov:</td>";
echo "<td>$json->naslov</td>";
echo"</tr>"; echo" <tr>";
echo"<td class='cls'>Žanr:</td>";
52
echo "<td>$json->zanrId</td>";
echo"</tr>"; echo" <tr>";
echo"<td class='cls'>Opis:</td>";
echo "<td>$json->opis</td>";
echo"</tr>"; echo" <tr>";
echo"<td class='cls'>Datum Izlaska:</td>";
echo "<td>$json->datumIzlaska</td>";
echo"</tr>"; echo "</table>"; ?> Listing br. 9 Prikaz pojedinih filmova
Slika 21 Prikaz podatke pomoću php veb aplikacije
Slika 22 Prikaz pojedini podatke pomoću php aplikacije
53
6. Zaključak
Osnovna hipoteza je bila da najčešće korišćene savremene tehnologije razvoja softvera
omogućavaju implementaciju softvera kroz višeslojne arhitekture uz podršku distribuiranom
procesiranju i servisno-orijentisanom pristupu. Ova hipoteza je potvrđena stručnim istraživanjem
za Javu, PHP i .NET tehnologije kao i konkretnim implementiranim primerom.
U stručnom istraživanju možemo videti da su navedeni programski jezici podržavaju razvoj
softvera višeslojne arhitekture, u naučno-stručnom istraživanju je potvrđeno da su analizirani
programski jezici najpopularniji jezici na tržištu.
Osim rezultata koji se odnose na dokazivanje hipoteze i podhipoteza, realizovan je teorijski
prikaz osnovnih koncepata, a takođe su prikazani rezultati analize naučno-istraživačkih radova.
Implementiran je primer softverske aplikacije koja je bazirana na MVC arhitekturi, a takođe
podržano je i distribuirano procesiranje uz servisno - orijentisani pristup.
Daljim radom na realizovanom primeru, mogla bi se ilustrovati primena kreiranog API od
strane java aplikacije, a takođe bi mogao da se implementira SOAP (simple object access protocol)
web servis slične namene, radi komparacije. Naravno, postojeći prototip softvera u
zadovoljavajućoj meri prikazuje osnovne koncepte i pristupe u savremenom razvoju distribuiranih
aplikacija.
54
7. Literatura
• Knjige:
[1] Tanenbaum A, Van Steen M: “Distributed systems, Principles and Paradigms“,
VrijeUniversiteit, Amsternam, Pearson Prentice Hall, 2007.
[2] Freeman Adam, Sanderson Steven: “Pro ASP.NET MVC 3 Framework“ Apress, 3rd
edition, 2011.
[3] Freeman Adam, Sanderson Steven: “Pro ASP.NET MVC 4“ Apress, 4th edition, 2012
[4] Freeman Adam: “Pro ASP.NET MVC 5“ Apress, 5th edition, 2013
[5] McGovern J, Tyagi S, “Java Web Services Architecture“ Elsevier, 2003
[6] A Majeed, I Raul, MVC Architecture: A Detailed Insight to the Modern Web Applications
Development, Korea Aerospace University, South Korea, 26. Sep,2018
[7] R Satpute, Prof. P.M. Chawan, Prof.I Jamadar, Prof.B Masram, A Comparative Study of
Architectural Patterns used for website or enterprise Applications, International Journal
of Innovative Research in Science, Engineering and Technology 12.Dec 2015
[8] M Akram, S Hayat - Qualitative & Quantitative analysis of tiered Architecture of Web-
Applications, Software Engineer at Europak Web, Stockholm Sweden
• Internet izvori:
[9] https://keetmalin.wixsite.com/keetmalin/single-
post/2017/09/27/Distributed-System-Architectures-and-Architectural-Styles
9.10.2018
[10] https://msdn.microsoft.com/en-us/library/dd381412(v=vs.108).aspx 9.10.2018
[11] https://www.link-elearning.com/site/kursevi/lekcija/4322 9.13.2018
[12] https://croz.net/usluge/razvoj-rjesenja/spring-framework/ 10.3.2018
[13] https://www.ibm.com/support/knowledgecenter/en/SS8S5A_7.0.0/com
.ibm.curam.content.doc/WebServices/c_WEBSERV_Glossary1Definitions1
.html
9.27.2018
[14] https://searchmicroservices.techtarget.com/tip/REST-vs-SOAP-Choosing-
the-best-web-service
10.5.2018
[15] https://www.sbs.rs/servisno-orijentisana-arhitektura-soa 10.7.2018
55
[16] http://yuinfo.artkey.rs/zbornici/2010/html/pdf/120.pdf 9.30.2018
[17] https://stackify.com/popular-programming-languages-2018/ 11.1.2018
[18] https://www.infoq.com/news/2011/06/Is-REST-Successful 11.9.2018
[19] https://blog.restcase.com/the-rise-of-rest-api/ 11.9.2018
[20] https://docs.microsoft.com/en-us/dotnet/standard/choosing-core-framework-
server
11.9.2018
[21] https://docs.microsoft.com/en-us/dotnet/framework/get-started/overview 11.9.2018
[22] http://ecomputernotes.com/csharp/dotnet/dot-net-framework 11.9.2018
[23] https://medium.com/@alicealdaine/top-10-api-testing-tools-rest-soap-
services-5395cb03cfa9
11.9.2018
• Slike
[24] https://www.it-akademija.com/java-development-program-obrazovanja 3.10.2018
[25] https://stackify.com/wp-content/uploads/2017/05/N-Tier-Architecture-
min.png
9.11.2018
[26] https://i-msdn.sec.s-msft.com/dynimg/IC263184.png 9.11.2018
[27] https://computersciencesource.files.wordpress.com/2010/02/eventbased.jpg?
w=630
9.11.2018
[28] https://computersciencesource.files.wordpress.com/2010/02/sharedata.jpg?
w=630
9.11.2018
[29] http://cse.csusb.edu/tongyu/courses/cs660/images/2/layer.png 9.11.2018
[30] https://www.oreilly.com/library/view/learning-aspnet-
core/9781788476638/assets/b55ecb1a-436c-422e-8505-cd335be0d2b0.png
9.27.2018
[31] https://www.sitepoint.com/best-php-frameworks-2014/ 1.10.2018