Aplicatie Pentru Organizarea Excursiilor Folosind Tehnologiile .net
UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ
PROIECT DE DIPLOMĂ
Pavel Valeriu-Ionuț
COORDONATOR ȘTIINȚIFIC
[Titlul științific, prenumele și numele coordonatorului]
[Luna (în litere) și anul susținerii proiectului]
CRAIOVA
APLICAȚIE PENTRU ORGANIZAREA EXCURSIILOR
FOLOSIND TEHNOLOGIILE .NET
PAVEL VALERIU-IONUȚ
COORDONATOR ȘTIINȚIFIC
[Titlul științific, prenumele și numele coordonatorului]
[Luna (în litere) și anul susținerii proiectului]
CRAIOVA
REZUMATUL PROIECTULUI
Aplicația pentru organizarea excursiilor oferă utilizatorilor posibilitatea de a căuta, organiza sau participa la un eveniment creat de o anumită persoană. Dezvoltarea proiectului s-a realizat folosind mediul de dezvoltare Microsoft Visual Studio 2010 împreuna cu tehnologiile .NET : ASP.NET MVC3, C#, Entity Framework 4.5. Pe parcursul implementării aplicației am întâlnit probleme care au încetinit procesul de interacțiune al utilizatorilor cu interfața, acestea fiind rezolvate prin implementarea unui cod eficient care ușurează accesul la diferitele secțiuni ale aplicației.
Termenii cheie: .net, c#, asp.net, mvc, excursii.
1. INTRODUCERE
O aplicație web sau „web app” este un program software ce rulează pe un server web. Spre deosebire de aplicațiile desktop, care sunt lansate de sistemul de operare, aplicațiile web trebuie accesate prin intermediul unui browser web.
Aplicațiile web au mai mult avantaje decât aplicațiile desktop. Din moment ce acestea rulează in browserul web, dezvoltatorii nu trebuie să dezvolte aplicații web pentru platforme multiple. Spre exemplu, o singură aplicație ce rulează in browserul Chrome va funcționa atât pe Windows cât și pe OS X, iar dezvoltatorii nu trebuie să furnizeze uptate-uri de soft atunci când aplicația este actualizată, deoarece toți utilizatorii au acces la versiunea actualizată odată ce aceasta va fi încărcată pe server. Un alt avantaj al aplicațiilor web este faptul că acestea sunt lansate rapid oriunde fără cost si fără cerințe de instalare pentru utilizatori.
Din punctul de vedere al utilizatorilor, o aplicație web poate furniza o interfață cu utilizatorul mult mai consistentă pe mai multe platforme, deoarece aspectul depinde de browser-ul folosit, ci nu de sistemul de operare. În plus, datele introduse într-o aplicație web sunt procesate si salvate de la distanță, ceea ce permite accesarea alceleiași date de la dispozitive multiple, decât transferul fișierelor între sistemele informatice.
În timp ce aplicațiile web oferă multe beneficii, acestea au și unele dezavantaje în comparație cu aplicațiile desktop. Din moment ce nu rulează direct în sistemul de operare, acestea au acces limitat la resursele sistemului, precum la CPU, memorie și sistemul de fișiere. Prin urmare, programele precum producția video și celelalte aplicații media funcționează în general mai bine ca aplicații desktop. Aplicațiile web sunt de asemenea dependente în totalitate de browserul web, iar dacă browser-ul nu mai funcționează s-ar putea să se piardă progresul nesalvat. De asemenea, actualizările de browser pot cauza incompatibilități cu aplicațiile web, creând astfel probleme neașteptate.
Cel mai important, site-urile web moderne permit capturarea, procesarea, stocarea și transmiterea datelor clientului (spre exemplu detalii personale, numere de card de credit, informații de securitate socială) pentru folosire imediată sau recurentă, iar acestea sunt realizate prin intermediul aplicațiilor web ce au caracteristici precum webmail, pagini de conectare, forme de suport și cerere produs, coșuri de cumpărături și sisteme de administrare a conținutului. Acestea sunt, prin urmare, programe de calculator care permit vizitatorilor site-ului să trimită și să primească date către/dintr-o bază de date prin internet folosind browserul web preferat. Datele sunt apoi prezentate utilizatorului prin browser pe măsură ce informația este generată dinamic (într-un format specific, precum în HTML folosind CSS) de aplicația web printr-un server web.
Tehnic, aplicațiile web interoghează conținutul server-ului și generează dinamic documente web pentru a le furniza clientului (persoane ce navighează pe internet). Documentele sunt generate într-un format standard pentru a permite suportul în toate browserele (precum HTML sau XHTML). JavaScript este o formă de script pentru client-side ce permite elemente dinamice pe fiecare pagină (spre exemplu modificarea unei imagini atunci când utilizatorul duce cursorul mouse-ului de-asupra acesteia). Browser-ul web este cheia – el interpresează și rulează toate scripturile în timp ce afișează paginile cerute și conținutul acestora.
1.1 Procesul de funcționare al unei aplicații web
Figura 1.1 detaliază modelul cu trei straturi de aplicații web. Primul strat este în mod normal un browser web sau interfața cu utilizatorul; al doilea strat este tehnologia de generare dinamica a conținutului precum servleții Java (JSP) sau Active Server Pages (ASP), iar stratul al treilea este conținutul bazei de date și datele clientului, spre exemplu nume de utilizator, parole, numere de securitate socială și detalii carte de credit.
Fig. 1.1. Procesul de funcționare unei aplicației web.
Figura 1.2 arată modul în care cererea inițială este declanșată de către utilizator prin intermediul browser-ului prin Internet către serverul de aplicații web. Aplicația web accesează serverele de baze de date pentru a efectua actualizarea sarcinilor cerute și pentru recuperarea informațiilor care se află în baza de date, iar apoi aceasta prezintă informația către utilizator prin intermediul browser-ului.
Fig. 1.2. Comunicare client-server.
1.2 Probleme de securitate web
În ciuda avantajelor pe care le au, aplicațiile web ridică o serie de probleme de securitate care decurg din codificarea necorespunzătoare. Deficiențele serioase sau vulnerabilitățile permit hackerilor accesul direct și public la bazele de date cu scopul de a prelua date sensibile. Multe dintre aceste baze de date conțin informații prețioase (precum detalii personale și financiare), ceea ce le face o țintă frecventă a hackerilor.
După cum am menționat, site-urile web depind de baze de date pentru a furniza informațiile necesare vizitatorilor. Dacă aplicațiile web nu sunt sigure, vulnerabile la cel puțin una din tehnicile variate ale hackerilor, atunci toate informațiile din baza de date sunt în pericol (figura 1.3).
Fig. 1.3. Accesarea neautorizată a informațiilor din baza de date.
Elemente ce influențează securitatea unei aplicații web:
Site-urile și aplicațiile web conexe trebuie să fie disponibile 24 ore pe zi, 7 zile pe săptămână, pentru a furniza serviciul solicitat către clienți, angajați, furnizori si alte părți interesate.
Programele Firewall și SSL nu oferă protecție împotriva hăcuirii aplicațiilor web, pur și simplu pentru că accesul către site-ul web trebuie făcut public – toate bazele de date moderne (Microsoft SQL Server, Oracle și MySQL) pot fi accesate prin porturi specifice ( exemplu: porturile 80 și 443) și oricine poate încerca să se conecteze direct la baza de date în mod eficient ocolind mecanismele de securitate utilizate de sistemul de operare. Aceste porturi rămân deschise pentru a permite comunicarea cu un trafic legitim, și, prin urmare, constituie o vulnerabilitate majoră.
Aplicațiile web au adesea acces direct la date backend precum bazele de date ale clienților și, prin urmare, controlează date valoroase și sunt mult mai greu de securizat. Cei care nu au acces vor avea o formă de script ce permite captarea și transmiterea de date. În cazul în care un hacker devine conștient de slăbiciunile unui astfel de script, el poate cu ușurință să reruteze traficul involuntar către altă locație și să acceseze nelegitim date personale.
Majoritatea aplicațiilor web sunt realizate la comandă și, prin urmare, implică un grad mai scăzut de testare decât un program gata de folosință. În consecință, aplicațiile personalizate sunt mai ușor de atăcat.
Aplicațiile web sunt prin urmare o poartă de acces la bazele de date, în special a aplicațiilor personalizate care nu sunt dezvoltate cu cele mai bune practici de securitate.
1.3 Scopul
Acestă aplicație web se adresează în principal persoanelor interesate să cunoască oameni noi, cu pasiuni comune, alături de care să călătorească sau să se întâlnească la o locație stabilită de un organizator.
Scopul principal al aplicației este de a îndemna oamenii să evadeze din mediul virtual, din fața calculatorului sau a telefonului, și să socializeze cu alte persoane.
1.4 Motivația
Deoarece tot mai multe persoane comunică cel mai mult prin intermediul rețelelor de socializare sau prin telefon, am ales tema „Aplicație pentru organizarea excursiilor folosind tehnologiile .NET” din dorința de a oferi o alternativă rețelelor de socializare prin intermediul căreia persoanele pot petrece timp împreună, în grupuri, și nu în spatele unei poze de pe o rețea de socializare.
2. TEHNOLOGII FOLOSITE
2.1 ASP.NET
ASP.NET este un model unificat de dezvoltare web care include serviciile necesare pentru construirea aplicațiilor Web cu un minim de codificare. ASP.NET este parte a tehnologiei .NET oferind astfel accesul utilizatorilor către clasele acestei platforme. Pentru dezvoltarea unei aplicații se poate folosi orice limbaj de programare compatibil cu CLR (Common Language Runtime), inluzând Microsoft Visual Basic și C#.
ASP.NET ofera trei platforme pentru crearea aplicațiilor web: ASP.NET Forme Web, ASP.NET MVC și ASP.NET Pagini Web, toate acestea fiind stabile și optimizate. Fiecare platformâ vizeaza o audiență diferita sau un tip de aplicație.
2.1.1 ASP.NET Web Forms (pagini .aspx)
Platforma Formelor Web se adresează dezvoltatorilor care preferă o programare declarativă și controlata, precum Microsoft Windows Forms (WinForms) și WPF/XAML/Silverlight. Acesta oferă un model de tragere și plasare a elementelor, așadar este popular pentru dezvoltatorii care cauta un mediu de dezvoltare rapid al aplicației (RAD).
În particular, modelul de Forme Web oferă urmatoarele caracteristici:
Un model de eveniment care expune evenimentele ce pot fi programate.
Serverul controlează ceea ce se randează din HTML.
Un set bogat de controale pentru accesul la date și afișarea acestora.
Conservarea automată a stării (datei) dintre cererile HTTP.
Formele Web funcționează bine pentru echipele mici de dezvoltatori web și designeri care doresc să profite de avantajul numărului larg de componente disponibile pentru dezvoltarea rapidă a aplicațiilor. În general, crearea unei aplicații folosind Formele Web necesită mai puține cunoștințe de programare decât crearea aceleiași aplicații folosind platforma ASP.NET MVC (Model-View-Controller). Componentele sunt strâns integrate și de obicei necesită mai puțin cod decât aplicațiile ASP.NET MVC.
Deoarece o pagină de Forme Web și controalele de pe pagină generează automat marcajul care este trimis către browser, nu mai este nevoie de un control peste HTML oferit de alte modele ASP.NET. Un model condus de eveniment, concentrat pe control, ascunde anumite părți din comportamentul HTML și HTTP, spre exemplu, nu este în totdeauna posibil să se specifice exact marcaj poate fi generat de un control.
Avantajele unei aplicații bazate pe Forme Web.
Platforma bazată pe Forme Web oferă urmatoarele avantaje:
Oferă zeci de evenimente care sunt suportate în sutele de cotroale ale serverului.
Folosește un model pentru controller-ul paginii care adaugă funcționalitatea către paginile individuale.
Folosește starea de vizualizare pe formele bazate pe server, acestea fiind mai eficiente în administrarea informației.
Funcționează bine pentru echipe mici de dezvoltatori Web și pentru designerii care vor sa profite de numărul mare de componente disponibile pentru dezvoltarea rapidă a aplicațiilor.
În general este mai puțin complexă pentru dezvoltarea aplicațiilor, deoarece componentele sunt strâns integrate și necesită mai puțin cod decât modelul MVC.
2.1.2 ASP.NET MVC
Modelul arhitectural Model-View-Controller (MVC) are rolul de a separa o aplicație în trei componente principale: model, view, controller. Platforma ASP.NET MVC oferă o alternativă către modelele ASP.NET Forme Web pentru crearea de aplicații web. Platforma ASP.NET MVC este ușor de folosit și extrem de testabilă fiind integrată cu caracteristicile existente ale ASP.Net, cum ar fi paginile master și autentificarea bazată pe accesul membrilor. Această platformă este definită în asamblajul System.Web.Mvc.
Modelul de design MVC este ilustrat în figura 2.1:
Figura 2.1. Componentele MVC
MVC este un model de design standard folosit de foarte mulți dezvoltatori. Unele tipuri de aplicații web vor beneficia de platforma MVC, altele vor continua sa folosească modelul tradițional ASP.NET care este bazat pe Forme Web. Există și posibilitatea ca unele aplicații să folosească o combinație între celelalte două.
Platforma MVC include urmatoarele componente:
Obiectele model sunt parte ale aplicației și implementează logica pentru domeniul de date. Adesea, obiectele model primesc și stochează starea modelului într-o bază de date. De exemplu, un obiect Produs poate primi informații de la o bază de date, să opereze asupra lor, și apoi să scrie înapoi informații actualizate către o tabelă Products din baza de date SQL Server.
În aplicațiile mici, modelul este adesea o separare conceptuală în loc de una fizică. De exemplu, dacă aplicația doar citește un set de date pe care le trimite vizualizării, aceasta nu are un strat de model fizic și clasele asociate. În acest caz, setul de date preiau rolul unui obiect model.
View-uri. View-urile sunt componente care afișează interfața cu utilizatorul (UI). De obicei, acestă interfață cu utilizatorul este creată din datele modelului. Un exemplu de view poate fi editarea unei tabele Produse care afișează căsuțe text, liste, și casete de bifat bazate pe starea curentă a obiectului Produs.
Controllere. Controller-urile sunt componentele care manipulează interacțiunea cu utilizatorul, lucrul cu modelul și în cele din urmă selectează o vizualizare pentru randare și apoi afișează interfața cu utilizatorul. Într-o aplicație MVC, view-ul doar afișează informația; controller-ul manipulează și răspunde la datele introduse de utilizator și la interacțiuni. Spre exemplu, controller-ul manipulează valorile stringurilor de interogare și le trimite către model, care poate să folosească aceste valori pentru interogări către baza de date.
Modelul MVC ajută la crearea aplicațiilor care separă astpectele diferite ale aplicației (logica de intrare, logica de activitate și logica UI), oferind în același timp o legătură între aceste elemente. Acest model specifică unde ar trebui să se afle în aplicație fiecare tip de logică. Logica interfeței cu utilizatorul este în view, logica de intrare este în controller, în timp ce logica de activitate se află în model. Această separare ajută la administrarea complexității unei aplicații, deoarece ea permite concentrarea pe un aspect de implementare la un moment dat.
Legătura dintre cele trei componente ale unei aplicații MVC promovează de asemenea dezvoltarea paralela. De exemplu, un dezvoltator poate implementa view-urile, altul poate implementa logica din controller, în timp ce al treilea dezvoltator se poate concentra pe logica de activitate din model.
Suport pentru dezvoltarea bazată pe testare.
Pentru a administra complexitatea, o aplicație care folosește modelul MVC se testează mai ușor decât o aplicație bazată pe Forme Web. De exemplu, într-o aplicație ASP.NET bazată pe Forme Web o singură clasă este folosită atât pentru a afișa rezultatul cât și pentru a răspunde datelor introduse de utilizator. Scrierea de teste automate pentru o aplicație ASP.NET bazată pe Forme Web poate fi un lucru complex deoarece pentru a testa pagini individuale trebuie instanțiate clasa paginii, toate controalele copii și clasele adiționale dependente din aplicație. Deoarece sunt instanțiate prea multe clase pentru a porni pagina, poate fi dificilă scrierea testelor care se concentrează exclusiv pe părți individuale ale aplicației, astfel testele dintr-o aplicație ASP.NET bazată pe Forme Web pot fi mai greu de implementat decât cele dintr-o aplicație MVC deoarece acestea necesită și un server Web. Platforma MVC deconectează elementele și folosește intens interfețele, lucru care face posibilă testarea componentelor individuale izolate de restul platformei.
Avantajele unei aplicații web bazată pe MVC.
Platforma ASP.NET MVC oferă următoarele avantaje:
Ușurează administrarea complexității prin divizarea aplicației în model, view și controller.
Nu folosește starea de vizualizare sau forme bazate pe server, iar acest lucru face ca platforma MVC să fie ideală pentru dezvoltatorii care vor control total asupra comportamentului unei aplicații.
Foloșește o platformă cu Controller Frontal care procesează cererile aplicației Web printr-un singur controller. Acest lucru permite crearea unui design pentru aplicație care suportă o infrastructură puternică de rutare.
Oferă un suport mai bun pentru dezvoltarea orientată pe teste (TDO).
Funcționează bine pentru aplicații Web care sunt sprijinite de un număr mare de echipe de dezvoltatori și pentru designerii Web care au nevoie de un grad ridicat de control asupra comportamentului aplicației.
Caracteristicile platformei ASP.NET MVC
Platforma ASP.NET MVC oferă următoarele caracteristici:
Separarea sarcinilor ( logica de intrare, logica de activitate și logica UI ), testabilitate și dezvoltare orientată pe teste (TDO). Toate contractele de bază din platforma MVC sunt bazate pe interfață și pot fi testate prin folosirea obiectelor false, acestea fiind obiecte simulate care imită comportamentul obiectelor actuale din aplicație. Testele pe unitate pot fi pornite fără a fi nevoie de inițializarea controller-ului dintr-un proces ASP.NET, ceea ce face ca testarea pe unități să fie rapidă și flexibilă.
O platformă extensibilă și conectabilă. Componentele platformei ASP.NET MVC sunt concepute astfel încât să poată fi ușor de conceput sau de personalizat. Platforma ASP.NET suportă de asemenea folosirea modelelor de containere ale Injectarea Dependenței (DI) și Inversiunea Controlului (IOC). Injectarea Dependenței permite injectarea obiectelor într-o clasă, în loc să se bazeze pe clasă pentru a crea obiectul în sine. Inversunea Controlului specifică faptul că un obiect necesită un alt obiect deoarece primul obiect ar trebui sa primească cel de-al doilea obiect dintr-o sursa externă precum fișierul de configurare.
Suport extins pentru rutarea ASP.NET, ceea ce este o componentă puternică de mapare a URL-ului ce permine construirea aplicatiilor care au URL-uri ușor de înțeles și de căutat. URL-urile nu necestă includerea extensiilor cu numele fișierului, și sunt concepute să suporte modelele de numire pentru URL-uri ce funcționează bine pentru optimizarea motoarelor de căutare (SEO) și pentru adresarea stării de transfer reprezentațională (REST).
Sprijin pentru folosirea marcajelor în pagina ASP.NET existentă (fișiere .aspx), controlul cu utilizatorul (fișiere .ascx) și pagina master ( fișiere .master). Pot fi folosite caracteristicile ASP.NET existente cu platrofma ASP.NET MVC, cum ar fi paginile master cuibărite, expresiile in-line (<%= %>), controale declarative de tip server, template-uri, localizare și așa mai departe.
Suport pentru caracteristicile ASP.NET existente. ASP.NET MVC permite utilizarea caracteristicilor precum autentificare prin forme și autentificare prin Windows, autorizare URL, membrii și roluri, managementul sesunii și a stării profilului, monitorizarea sănătății, sistemul de configurare și arhitectura furnizorului.
2.1.3 Pagini Web ASP.NET (fișiere .cshtml și .vbhtml)
Paginile Web ASP.NET se adresează dezvoltatorilor care doresc o dezvoltare web simplă, împreuna cu PHP. În modelul Paginilor Web se pot crea pagini HTML și apoi adăuga codul pentru interacțiunea cu serverul pentru a controla într-un mod dinamic cum este randat marcajul. Paginile Web sunt concepute ca o platforma de categorie ușoară, și este cel mai ușor punct de acces în ASP.NET pentru persoanele care cunosc HTML dar nu au cunoștinte solide de programare – de exemplu, studenții sau pasionații acestui domeniu. Este de asemenea o cale bună pentru dezvoltatorii web care cunosc PHP sau platforme asemănatoare pentru a începe să folosească ASP.NET.
Precum Formele Web, Paginile Web sunt orientate spre dezvoltarea rapidă, acestea oferind componente numite ajutoare ce pot fi adăugate la pagini și permit îndeplinirea sarcinilor printr-un număr minim de linii de cod. De exemplu, există ajutoare pentru a afișa datele din baza de date, adăugarea unui feed Twitter, conectare folosind Facebook-ul, adaugarea harților în pagina, și așa mai departe.
Paginile Web oferă o abordare mai simplă decât Formele Web. Fișierele .cshtml sau .vbhtml au logica de execuție de sus pâna jos, precum PHP sau SHTML și aceste tipuri de fișiere se adaptează ușor la funcționalitatea pe partea de client prin JavaScript și jQuery deoarece sunt de tip fișiere HTML ce conțin cod ASP.NET în ele.
2.2 ENTITY FRAMEWORK
Entity Framework este un set de tehnologii în ADO.NET ce suportă dezvoltarea aplicațiilor orientate pe baze de date. Arhitecții și dezvoltatorii aplicațiilor orientate pe baze de date trebuie sa modeleze entitățile, relațiile și logica problemelor de activitate și trebuie de asemenea să lucreze cu motoarele de date folosite pentru a stoca și a primi datele. Datele pot acoperi sisteme de depozitare multiple, fiecare cu propriul protocol; chiar și aplicațiile care lucrează cu un singur sistem de depozitare trebuie să echilibreze cerintele sistemului de depozitare cu cele de scriere de cod eficientă și mentenabilă.
Entity Framework permite dezvoltatorilor să lucreze cu date sub forma unor obiecte și proprietăți specifice domeniului, cum ar fi clienții și adresele clienților, fără a fi nevoie să se îngrijoreze cu tabelele și coloanele bazei de date care stau la baza stocării datelor. Folosind Entity Framework, dezvoltatori pot lucra la un nivel mai ridicat de abstractizare atunci când manipulează date și pot crea sau menține aplicații orientate pe date cu mai puțin cod decât în aplicațiile tradiționale. Deoarece Entity Framework este o componenta a .NET Framework, aplicațiile Entity Framework pot funcționa pe orice calculator pe care este instalat .NET Framework.
2.2.1 ACCESAREA MODELELOR
Un design comun și de lungă durată la construirea unei aplicații sau serviciu este diviziunea aplicației sau a serviciului în trei părți: un domeniu model, un model logic și un model fizic. Domeniul model definește entitățile și relațiile în sistemul care este modelat. Modelul logic pentru o bază de date relațională normalizează entitățile și relațiile în tabele având constrângeri de cheie străină. Modelul fizic abordează capabilitățile unui anumit motor de date prin specificarea detaliilor de stocare precum partiționarea și indexarea.
Modelul fizic este rafinat de către administratorii bazei de date pentru a îmbunătăți performanța, însă programatorii care scriu codul aplicației se limitează la lucrul cu logica model prin scrierea interogărilor SQL și apelarea procedurilor stocate. Modelele de domeniu sunt în general folosite ca o unealtă pentru capturarea și comunicarea cerințelor unei aplicații, dar cel mai des pentru diagrame inerte care sunt vizualizate și discutate în stagiile inițiale ale proiectului, iar apoi abandonate. Multe echipe de dezvoltatori sar peste crearea unui model conceptual și încep prin specificarea tabelelor, coloanelor și cheilor dintr-o bază de date relațională.
Entity Framework accesează modelele permițându-le dezvoltatorilor să interogheze entitățile și relațiile în domeniul model (în Entity Framework este numit model conceptual) în timp ce se bazează pe Entity Framework pentru a traduce aceste operațiuni către comenzile sursă specifice. Modelul conceptual, modelul de stocare și mapările între cele două sunt exprimate în schemele bazate pe XML și definite în fișiere care au extensii de nume corespunzătoare:
Limbajul conceptual de definire a schemei (CSDL) desineste modelul conceptual. CSDL este implementarea Framework-ului Entity pentru Modelul de Date Entity, iar extensia fișierului este .csdl.
Limbajul de stocare a definiției schemei (SSDL) definește modelul de stocare, acesta fiind numit model logic, iar extensia fișierului este .ssdl.
Limbajul de specificare a mapării (MSL) defineste mapările între modelele de stocare și cele conceptuale, iar extensia fișierului este .msl.
Modelul de stocare și mapările se pot schimba oricând fără a necesita schimbări adiționale în modelul conceptual, clasele de date sau în codul aplicației.
Framework-ul Entity utilizează aceste fișiere modele și de mapare pentru a crea, citi, actualiza și șterge operații contra entităților și relațiilor în modelul conceptual, echivalente operațiilor din datele sursă. Framework-ul Entity suportă și maparea entităților în modelul conceptual pentru stocarea procedurilor în sursa de date.
2.2.2 MAPAREA OBIECTELOR LA DATE
Programarea orientată pe obiecte reprezintă o provocare pentru interacțiunea cu sistemele de stocare a datelor. Cu toate că organizarea claselor se oglindește cu organizarea tabelelor din baze de date relaționale, potrivirea nu este perfectă. Tabelele multiple normalizate corespund în mod frecvent unei singure clase, iar relațiile dintre clase sunt de obicei reprezentate diferent decât relațiile dintre tabele. De exemplu, pentru a reprezenta clientul pentru o comandă de vânzări, o clasă Comandă s-ar putea să folosească o proprietate care conține o referință către instanța unei clase Client, în timp ce un rând din tabelul Comandă al bazei de date conține o coloană cu cheie străină (sau un set de coloane) cu o valoare care corespunde valorii cheii primare din tabela Client. O clasă Client s-ar putea să conțină o proprietate numită Comenzi ce conține o colecție de instanțe ale clasei Comandă, în timp ce tabela Client din baza de date nu are coloane comparabile. Framework-ul Entity oferă dezvoltatori cu flexibilitatea de a reprezenta relații în aceasta modalitate, sau de a realiza mai multe relații apropiate între modele deoarece acestea sunt reprezentate în baza de date.
Soluțiile existente au încercat să conecteze acest decalaj, numit frecvent „nepotrivire de impedanță”, numai prin maparea claselor orientate pe obiect și proprietăților către coloanele și tabelele relaționale. În loc de a lua aceasta abordare tradițională, Entity Framework mapează tabelele relaționale, coloanele și cheile străine în modele logice către entități și relații în modelele conceptuale. Acest lucru permite o flexibilitate mai ridicată atât în definirea obiectelor cât și în optimizarea modelului logic. Uneltele unui Model de Date Entitate generează clase de date extensibile bazate pe modelul conceptual. Acestea sunt clase parțiale ce pot fi enxtinse cu membrii adiționali adăugați de dezvoltator. Implicit, clasele care sunt generate pentru un model conceptual particular derivă din clasele de bază care oferă servicii pentru materializarea entităților ca obiecte și pentru urmărirea și salvarea modificărilor. Dezvoltatorii pot utiliza aceste clase pentru a lucra cu entitățile și relațiile legate de asociații.
2.2.3 ACCESAREA SI MODIFICAREA DATELOR ENTITATE
Mai mult decât o altă soluție de mapare a obiectelor relaționale, Entity Framework este fundamental despre permiterea applicațiilor să acceseze și să schimbe date care sunt reprezentate ca entități și relații în modelul conceptual. Entity Framework folosește informația în fișierele model și de mapare pentru a traduce interogările obiectelor contra tipurilor de entități în interogările datelor sursă. Rezultatele interogărilor sunt materializate în obiecte administrate de Entity Framework.
Entity Framework oferă următoarele căi de a interoga un model conceptual și de a returna obiecte:
LINQ către Entități. Oferă suport în Interogări Integrate în Limbaj (LINQ) pentru interogarea tipurilor de entități ce sunt definite într-un model conceptual.
Entity SQL. Un dialect independent de stocare ce funcționează direct cu entitățile în modelul conceptual și ce suportă concepte Entitate de Date Model. Entity SQL este folosit atât cu interogări pe obiect cât și cu interogări ce sunt executate prin folosirea furnizorului EntityClient.
Metode pentru construirea interogărilor. Aceste metode permit construirea interogărilor de tip Entity SQL prin folosirea metodelor de interogare în stilul LINQ.
În figura 2.1 este ilustrată arhitectura Framework-ului Entity pentru accesarea datelor:
Fig. 2.1. Arhitectura Framework-ului Entity.
Instrumentele Modelului de Date Entitate pot genera o clasă derivată din clasa ObjectContext ce reprezintă containerul entitate în modelul conceptual. Acest obiect context oferă multe facilități pentru urmărirea modificărilor și gestionarea identității, concurenței și relațiilor. Această clasă expune, de asemenea, o metodă SaveChanges care scrie inserții, actualizări și ștergeri la sursa de date. Precum interogările, aceste modificări sunt fie făcute prin comenzi generate în mod automat de către sistem sau prin proceduri memorate care sunt specificate de către dezvoltator.
2.2.4 FURNIZORI DE DATE
Furnizorul EntityClient extinde modelul furnizor ADO.NET prin accesarea de date în ceea ce privește entitățile conceptuale și relațiile. El execută interogări ce folosesc Entity SQL. Entity SQL oferă limbajul de interogare de bază care permite ca EntityClient să comunice cu baza de date.
Entity Framework include un Furnizor de Date SqlClient actualizat ce suportă arbori de comandă canonici.
2.3 LIMBAJUL DE PROGRAMARE C#
C# este un limbaj elegant și orientat pe obiecte ce permite dezvoltatorilor sa construiască o varietate de aplicații sigure și robuste ce ruleaza pe .NET Framework. Acesta poate fi folosit pentru a crea aplicații client Windows, servicii Web XML, componente distribuite, aplicații client-server, aplicații de baze de date și multe altele. Visual C# oferă un editor de cod avansat, proiectanti convenabili pentru interfețe cu utilizatorul, debugger integrat și multe alte instrumente ce ușurează dezvoltarea aplicațiilor bazate pe limbajul de programare C# și .Net Framework.
Sintaxa C# este foarte expresivă și simplifică mult din complexitatea limbajului C++, oferind de asemenea și caracteristici puternice precum tipuri de valori nule, enumerări, delegații, expresii lambda și acesare directă a memoriei, ce nu se află în Java. C# suportă metode și tipuri generice, ce asigură creșterea siguranței și performanței, și iteratori, ce permit implementatori ai claselor de colecție pentru a defini comportamente de repetare personalizate ce sunt ușor de folosit de codul client.
Ca un limbaj orientat pe obiecte, C# suportă concepele încapsulării, moștenirii și polimorfismului. Toate variabilele și metodele, incluzănd metoda Main și punctul de intrare al aplicației, sunt încapsulate în definițiile clasei. O clasă poate moșteni direct din clasa părinte, dar ea poate implementa orice număr număr de interfețe. Metodele ce suprapun metodele virtuale într-o clasă părinte necesită cuvântul „override” ca o modalitate de a evita redefinirea accidentală. În C#, o structură este ca o clasă cu greutate redusă; aceasta este un tip alocat de stivă ce poate implementa interfețe dar nu suportă moștenirea.
În plus față de aceste principii de bază orientate pe obiect, C# ușurează dezvoltarea componentelor software prin mai multe construcții inovatoare de limbaj, incluzănd:
Semnături de metode încapsulate numite delegații. O delegație este un tip ce reprezintă referințele către metode cu un o listă particulară de parametrii și tip de returnare. La instanțierea unei delegații se poate asocia instanța acestea cu orice metodă cu o semnătură compatibilă și tip de returnare. Se poate invoca (sau apela) metoda prin instanța delegației.
Atribute, ce furnizează metadate declarative despre tipurile în timpul rulării.
Comentarii de documentare XML inline.
Interogări de limbaj integrate (LINQ) ce oferă capabilități de interogare integrate pe o varietate de surse de date.
Interfețe, ce reprezintă un mijloc de a face contact cu o clasă pentru servciile prevăzute de interfață. În C#, o clasă poate moșteni de la un singur părinte, dar o clasă poate implementa interfețe multiple. Atunci cănd implementează o interfață, o clasă C# în vigoare promite să asigure funcționalitatea specificată de interfață.
Caracteristici orientate pe componente, precum proprietăți, evenimente și construcții declarative (precum atributele). Programarea orientată pe componente este susținută de stocarea metadatelor cu codul pentru clasă. Metatadele descriu clasa, incluzănd metodele și proprietățile, precum și nevoile sale de securitate și alte atribute, cum ar fi dacă aceasta poate fi serializată; codul conține logica necesară pentru a efectua funcțiile sale. O clasă compilată este prin urmare o unitate însăși conținută. Prin urmare, un mediu gazdă ce cunoaște citirea metadatelor unei clase și codului nu necesită alte informații pentru a se folosi de acestea. Folosind C# și Common Language Runtime (CLR), este posibilă adăugarea metadatelor personalizate la o clasă prin crearea atributelor personalizate. De asemenea, este posibilă citirea metadatelor unei clase folosind tipurile CLR ce suportată reflecția.
2.3.1 .NET FRAMEWORK
Programele C# rulează pe .NET Framework, o componentă integrală a Windows-ului ce include un sistem virtual de execuție numit Common Language Runtime (CLR) și un set unificat de biblioteci de clasă. CLR reprezintă punerea în aplicare comercială de către Microsoft a infrastructurii limbajului comun (CLI), un standard internațional ce reprezintă baza pentru crearea mediilor de execuție și de dezvoltare, în care limbajele și librăriile lucrează perfect împreună.
Codul sursă scris în C# este compilat într-un limbaj intermediat (IL) conform specificațiilor CLI. Codul și resursele IL, precum bitmap-urile și șirurile de caractere, sunt stocate pe disc într-un fișier executabil numit asamblaj, de regulă cu extensia .exe sau .dll. Un asamblaj conține un manifest ce oferă informații despre tipurile, versiunea, cultura și cerințele de securitate ale asamblului.
Interoperabilitatea limbajului este un element cheie din .NET Framework. Deoarece codul IL produs de compilatorul C# este conform cu Specificațiile Tipului Comun (CTS), codul IL generat din C# poate interacționa cu codul care a fost generat din versiunile .NET din Visual Basic, Visual C++, sau oricare alte 20 de limbaje compilante CTS. Un singur asamblaj poate conține module multiple scrise în limbaje .NET diferite, și tipurile se pot referenția unul pe celălalt ca și cum ar fi scrise în același limbaj.
În plus față de serviciile de rulare timp, .NET Framework include de asemenea o bibliotecă extinsă de peste 4000 de clase organizate în namespace-uri ce oferă o gamă largă de funcționalități utile pentru orice, de la intrările și ieșirile din fișier pentru manipularea șirurilor în analiza XML, până la controale Windows Forms. Aplicația C# obișnuită utilizează extensiv biblioteca clasei .NET Framework pentru a controla „verticalitatea” legăturilor comune.
Atunci când programul C# este executat, asamblajul este încărcat în CLR, ceea ce poate lua diferite acțiuni bazate pe informațiile din manifest. Apoi, dacă cerințele de securitate sunt îndeplinite, CLR efectuează compilația exact la timp (JIT) pentru a converti codul IL în instrucțiunile mașină native. CLR oferă și alte servicii legate de colectarea automată a resturilor, manipularea excepțiilor, și administrarea resurselor. Codul care este executat de CLR este uneori numit „cod gestionat”, în contrast cu „cod negestionat” care este compilat în limbaj nativ de mașină ce țintește un sitem specific. Următoarele diagrame ilustrează relațiile dintre timpul de compilare și timpul de execuție ale fișierelor codului sursă din C#, librăriile claselor .NET Framework, asamblaje, și CLR.
În figura 2.3 este ilustrată execuția unei aplicații web într-un proiect Visual C#.
Fig. 2.3. Procesul de execuție al aplicației web.
Figura 2.4 prezintă, de asemenea, modul în care funcționează codul gestionat într-o arhitectură mai mare:
Fig. 2.4. Funcționarea codului într-o arhitectură
de dimensiuni mari
2.4 Microsoft Visual Studio
Microsoft Visual Studio este un mediu de dezvoltare integrat (IDE) de la Microsoft. El este folosit la dezvoltarea programelor de calculator pentru Microsoft Windows, dar și pentru site-uri web, aplicații web și servicii web. Visual Studio folosește platformele Microsoft pentru dezvoltarea softului, precum Windows API, Windows Forms, Windows Presentation Foundation, Windows Store și Microsoft Silverlight. El poate produce atât cod nativ cât și cod administrat.
Visual Studio include un editor de cod ce suportă IntelliSense (componentă pentru completarea automată a codului), precum și refactorizarea codului. Debugger-ul integrat funcționează atât ca debugger la nivel de sursă cât și ca debugger la nivel de mașină. Alte unelte încorporate include un designer de formulare pentru construirea de aplicații GUI, designer web, designer de clasă și designer pentru schema bazei de date.
Acesta suportă de asemenea și diverse limbaje de programare și permite editorului de cod și debugger-ului să suporte aproape orice limbaj de programare. Limbajele încorporate includ C, C++ și C++/CLI, VB.NET, C#, și F#.
2.4.1 Arhitectura
Visual Studio nu suporta intrinsec niciun limbaj de programare, soluție sau instrument; în schimb, el permite conectarea funcționalității codată ca un VSPackage. Când este instalată, funcționalitatea este disponibila ca un Serviciu. IDE-ul oferă trei servicii: SvsSolution, ce oferă abilitatea de a enumera proiecte și soluții; SvsUIShell, ce oferă ecranizarea și funcționalitatea UI; și SvsShell, ce se ocupă cu înregistrarea pachetelor VSPackages. În plus, IDE-ul este de asemenea responsabil pentru coordonarea și permiterea comunicării între servicii.
Suportul pentru limbajele de programare este adăugat prin folosirea unui VSPackage specific, numit un serviciu de limbaj. Un serviciu de limbaj definește diferitele inferfețe pe care VSPackage le poate implementa pentru a adăuga suport pentru diverse funcționalități. Funcționalitățile ce pot fi adăugate astfel includ colorarea sintaxei, completarea codului, potrivirea acoladelor, informații despre parametrii, liste de membrii și semne de eroare.
2.4.2 Editor de cod
Precum orice alt IDE, Visual Studio include un editor de cod ce suportă evidențierea sintaxei și autocompletarea codului folosind IntelliSense pentru variabile, funcții, metode și interogări LINQ. IntelliSense este suportat pentru limbajele incluse, precum și pentru XML, Cascading Style Sheets (CSS) și Javascript atunci când sunt dezvoltate site-uri web sau aplicații web.
Editorul de cod Visual Studio suportă de asemenea și setarea marcajelor de carte în cod pentru navigare rapidă. Alte ajutoare de navigare includ colapsarea blocurilor de cod și căutare elementară, în plus față de căutarea text normală sau de căutarea folosind expresii regex. Editorul de cod suportă și fragmente de cod, care sunt salvate ca șabloane pentru codul ce se repetă.
2.4.3 Debugger
Visual Studio include un debugger ce funcționează atât ca debugger la nivel de sursă, cât și ca debugger la nivel de mașină, el execută atât cod administrat cât și cod nativ și poate fi folosit pentru a depana aplicații scrise în orice limbaj suportat de Visual Studio. În plus, se poate atașa la procesele în execuție pentru a le monitoriza și depana. Debugger-ul din Visual Studio poate de asemenea crea și imagini de memorie pentru a le încărca mai târziu pentru depanare.
Debugger-ul permite setarea de breakpoint-uri (ce opresc temporal executarea la o anumită poziție). Aceste breakpoint-uri pot fi condiționale, însemnând că ele se execută atunci când condiția este îndeplinită.
2.5 Hypertext Markup Language
Noțiunea hipertext a fost introdusă în 1965 de Ted Nelson și reprezintă o tehnică de organizare a informației de tip text pentru parcurgerea ei în mod neliniar – prin salturi între fragmente de text asociate logic. Se obține astfel o prezentare a informației pe niveluri de detaliere, permițându-se o explorare personalizată, logică și rapidă. Conceptul hipermedia apare odată cu dezvoltarea spațiului Web pentru a facilita accesarea în mod asemănător a informației media (text, imagine, animație, audio, video).
HyperText Markup Language (HTML – limbaj de marcare a hipertextului) este un limbaj de marcare standard utilizat pentru structurarea informației bazate pe text din documentele vehiculate pe Web. Un document HTML este un fișier text care conține specificații de prezentare a textului și imaginilor pe ecranul unui calculator oarecare. Programul care interpretează specificațiile și afișează corespunzător informațiile se numește navigator (în engleză, browser). Termenul de „marcare” provine din practica editorilor de pe vremuri care făceau marcaje pe documente pentru a indica tipografilor ce fonturi și stiluri să folosească. Limbajele de marcare sunt utilizate de asemenea, la scrierea textelor științifice publicate în articole sau cărți cu format impus de către casele de editură. TeX și troff sunt exemple de procesoare de texte bazate pe limbaje de marcare utilizate în acest sens.
Limbajul HTML conține o serie de specificații pentru formatarea elementelor (caractere, paragrafe, liste, tabele, formulare, cadre, imagini etc.) unui document hipertext.
Limbajul HTML utilizează entități de tip container pentru delimitarea informației aparținând aceleiași categorii.
O entitate de tip container este delimitată de două marcaje (etichete): eticheta de început, cu forma generală <etichetă> și eticheta de sfârșit, </etichetă> . De exemplu, documentul HTML este delimitat de etichetele: <html> și </html> .
Un document HTML este compus din două părți principale: antetul (head) și corpul documentului (body). Antetul poate conține titlul paginii Web, definiții de rutine script (de exemplu, JavaScript), definiții de stiluri, comentarii și meta-elemente. Corpul documentului conține informația propriu-zisă, indicații pentru afișarea acesteia și eventual comentarii. Pentru a aplica un stil sau un format unei informații, aceste specificații trebuie incluse în eticheta de început a unui element container.
Pentru a include comenzi într-un document HTML se utilizează declarația de comentariu. Aceasta începe cu caracterele „ <! ” urmate de zero, unu sau mai multe comentarii și se încheie cu caracterul „ > ”. Fiecare comentariu începe și se termină cu caracterele „ – ”; într-o declarație de comentariu sunt permise spațiile, dar nu înainte de primul comentariu.
Structura generală a unui document HTML este următoarea:
<html><!– început de document HTML –>
<head><!– început de antet –>
…
</head><!– sfârșit de antet –>
<body><!– început de corp document –>
…
</body><!– sfârșit de corp document –>
</html><!– sfârșit de document HTML –>
2.6 Cascading Style Sheets
Foile de stil în cascadă (Cascading Style Sheets – CSS) au fost introduse în versiunea 4.0 a
limbajului HTML și sunt suportate de navigatoarele Internet Explorer și Netscape începând cu versiunile 4.0. Utilizând CSS proiectarea și întreținerea produselor multimedia se simplifică prin delimitarea proiectării conținutului de proiectarea modului de afișare a acestuia. Astfel, se obține o flexibilitate mai mare în controlul stilurilor – care acum pot fi aplicate și/sau modificare unitar, și în același timp o reducere a timpului de proiectare și de depanare.
În limbajul HTML termenul stil se referă la modul cum sunt afișate de către navigatoarele Web anumite elemente HTML (titluri, text, paragraf, fundaluri, borduri, tabele, liste etc.). Aplicarea unui stil, unui element HTML se realizează prin plasarea acestuia într-un container și definirea proprietăților dorite în eticheta de început a acestuia, ca în următorul exemplu.
<font face="Verdana" color="blue">
Acest text va fi afișat de navigator cu corp de litera tip Verdana si culoare albastra.
</font>
Începând cu versiunea 4.0 a limbajului HTML definirea unui stil pentru un element HTML se poate realiza în unul dintre următoarele moduri:
în interiorul etichetei de început a stilului aplicat unui element HTML – regulă în linie (inline);
în interiorul antetului ( head ) unui document HTML – regulă internă sau înglobată (embedded);
într-un fișier de stil CSS extern (fișier cu extensia .css) – regulă externă; din interiorul unui document HTML pot fi apelate mai multe fișiere de stil externe.
2.6 LIBRĂRIA JQUERY
jQuery este o librărie rapidă și concisă creată de către John Resig în anul 2006 cu motto-ul „Scrie mai puțin, realizează mai mult”.
jQuery simplifică documentul HTML prin parcurgere, manipularea evenimentelor, animații, și interacțiuni Ajax pentru o dezvoltare web rapidă.
Acesta este un set de instrumente JavaScript conceput pentru a simplifica diferite sarcini scriind mai puțin cod. În continuare este prezentată o listă a caracteristicilor importante suportate de librăria jQuery:
Manipulare DOM (Document Object Model) – selectarea cu ușurință a elementelor din DOM, traversarea și modificarea conținutului lor prin folosirea selectorului open source cross-browser numit „Sizzle”.
Manipulearea evenimentelor – oferă o modalitate elegantă de a captura o gamă largă de evenimente, precum efectuarea unui click pe un link, fară a afecta codul HTML cu manipularea evenimentului.
Suport AJAX – posibilitatea de a dezvolta un site responsive și bogat în caracteristici folosind tehnologia AJAX.
Dimensiune redusă – jQuery este o librărie cu dimensiune foarte redusă, aproximativ 19KB (versiune Minified și gzipped).
Suport Cross Browser – funcționează bine în următoarele browsere: Internet Explorer 6.0+, Firefox 2.0+, Safari 3.0+, Google Ghrome și Opera 9.0+.
Cea mai recentă tehnologie – suportă selectori CSS3 și sintaxa de bază XPath.
2.7 FRAMEWORK-UL BOOTSTRAP
Bootstrap este un framework intuitiv și puternic pentru front-end, folosit pentru o dezvoltare web rapidă și ușoară, având la bază un model bine stabilit de coloane ce sunt folosite în HTML pentru a crea un site responsive mult mai rapid. Bootstrap a fost dezvoltat de către Mark Otto și Jacob Thornton la compania Twitter și a fost lansat ca un produs open source în August 2011 pe GitHub.
Caracteristici principale ale framework-ului Bootstrap:
Design responsive – conține stiluri responsive de CSS pentru o ajustare ideala a rezoluției pe desktop-uri, tablete și telefoane mobile, precum este ilustrat în imaginea de mai jos:
Este suportat de toate browserele populare.
Oferă o soluție curată și uniformă pentru construirea unei interfețe pentru dezvoltatori.
Conține componente funcționale încorporate ce sunt ușor de personalizat.
Acesta oferă de asemenea și pesonalizare bazată pe web.
Este open source.
3. PROIECTAREA APLICAȚIEI PENTRU ORGANIZAREA EXCURSIILOR
Aplicația web pentru organizarea excursiilor prin intermediul mediului online trebuie să satisfacă următoarele cerințe:
dezvoltarea aplicației se va realiza folosind tehnologiile .NET;
editorul folosit va fi Microsoft Visual Studio 2010;
baza de date va conține două tabele, pentru salvarea excursiilor și a participanților;
baza de date va fi realizată cu Entity Framework 4.5;
utilizatorul aplicației trebuie să aibă posibilitatea înregistrării pe site, creării unui cont sau de a își modifica parola contului în orice moment;
caracteristicile principale ale aplicației includ crearea, organizarea, căutarea, editarea și ștergerea unei excursii, precum și oferirea unui formular de contact ce se va realiza cu SMTP;
interfața cu utilizatorul trebuie să fie responsive, astfel încât aceasta să poată fi accesată și de pe dispozitive cu ecranul mic (tablete sau telefoane mobile);
conținutul hărții ce indică locul în care se va desfășura excursia trebuie să se actualizeze în timp real, fără a fi nevoie ca utilizatorul să dea refresh la pagină.
3.1 Structura proiectului
Proiectele implementate cu ASP.NET MVC au implicit șase nivele de foldere (tab. 3.1):
Tab. 3.1. Folderele proiectului și scopul acestora
ASP.NET MVC nu necesită neapărat această structura, iar structura unor aplicații largi se poate împărți în mai multe proiecte pentru a mări puterea de administrare (spre exemplu: clasele cu modele de date se află de regulă în clasele librărie ale proiectului din aplicația web. Cu toate acestea, structura implicită a proiectului oferă o convenție ale folderelor ce mențin aplicația ușor de administrat.
Folderul „Controllers” este prezentat în fig. 3.8 și conține următoarele clase de tipul controller: AccountController.cs, HomeController.cs, RSVPController.cs, SearchController.cs, SendMailController.cs, TripsController.cs.
Fig. 3.8. Conținut folder „Controllers”.
Folderul „Views” este prezentat în fig. 3.9 și conține cinci sub-foldere: Account, Home, SendMail, Shared, Trips; fiecare dintre aceste sub-foldere conțin la rândul lor fișiere .ascx (template-uri), .ascx (fișiere parțiale) și un fișier .Master ce se randează pe toate paginile.
Fig. 3.9. Conținut folder „Views”.
Folderele „Content” și „Scripts” sunt prezentate în fig. 3.10 și conțin fișiere CSS și imagini, respectiv librării JavaScript ce pot activa ASP.NET AJAX și suportul jQuery în aplicație. În folderul „Content” sunt incluse și fișierele frameworkului Bootstrap și cele ale librăriei de icoane FontAwesome.
Fig. 3.10. Conținut foldere „Content” și „Scripts”.
3.2 Proiectarea bazei de date
În proiectarea bazei de date s-au definit numărul tabelelor, numele, precum și conținutul acestora (tabelul 3.2 și tabelul 3.3). Astfel sunt utilizate două tabele, „Trips” pentru salvarea excursiilor, respectiv „RSVP” pentru salvarea persoanelor ce participă la excursii.
Fiecare dintre cele două tabele conține treisprezece, respectiv trei coloane al căror nume corespunde tipului de operațiune ce se efectuează asupra lor.
Relația dintre cele două tabele este de „unu-la-mai-mulți”, astfel încât să se poată asocia fiecare excursie cu zero sau mai mulți participanți. Schema acestei relații este exemplificată în fig. 3.11 ce are setată o cheie străină în tabelul „RSVP” pe coloana „TripID” legată cu coloana „TripID” din tabelul „Trips”.
Tab. 3.2. Tabel „Trips”.
Tab. 3.3. Tabel „RSVP”.
3.3 Schema de proiectare
Nucleul unei aplicații web este logica pe partea de server. Aplicația poate conține mai multe straturi distincte, iar exemplul tipic este o arhitectura cu trei straturi formate din stratul de prezentare, activitate, și de date. Figura 3.12 ilustrează proiectarea arhitecturii unei aplicații web cu componentele comune grupate pe diferite arii de interes.
Stratul de prezentare include de regulă interfața cu utilizatorul și componentele prezentării logice; stratul de activitate include logica de activitate, activitatea fluxului de lucru și activitatea componentelor entitate, și opțional o fațadă; stratul de date include de obicei accesul la date și componentele serviciului agent.
Figura 3.12. Structura tipică a unei aplicații web.
3.4 Aspecte generale de proiectare
Scopul proiectării unei aplicații web este acela de a minimiza complexitatea prin separarea sarcinilor în diferite domenii de interes pentru proiectarea unei aplicații sigure și performantă. În proiectarea aplicației trebuie respectate următoarele principii:
Partiționarea aplicației într-un mod logic. Se folosesc straturi pentru partiționarea logică a aplicației în straturi de prezentare, activitate și acces de date. Acest lucru ajută la crearea unui cod administrabil și permite monitorizarea și optimizarea performanței pe fiecare strat în parte.
Înțelegerea modului în care componentele comunică între ele. Acest lucru necesită o înțelegere a scenariilor de implementare pe care le suportă aplicația.
Folosirea cache-ului pentru reducerea cererilor către server. În proiectarea unei aplicații web trebuie luate în considerare folosirea tehnicilor precum punerea în cache pentru reducerea cererilor dintre browser și serverul web, și dintre serverul web și serverele inferioare. O strategie cache bine proiectată este probabil cea mai importantă performanță referitoare la proiectare.
Utilizarea log-urilor. Aceste loguri pot fi folosite pentru a detecta activitate suspicioasă, ceea ce furnizează în mod frecvent indicii timpurii al unui atac asupra sistemului.
Luarea în considerare a autentificării utilizatorilor peste limitele de încredere. Aplicația trebuie proiectată pentru a autentifica utilizatorii de fiecare dată când trec o limită de încredere.
Nu trebuie trimise date sensibile ca text clar în rețea. Atunci când sunt trimise prin rețea date sensibile precum parola sau cookie-ul de autentificare trebuie luată în considerare criptarea și semnarea datelor sau folosirea criptării Secure Sockets Layer (SSL).
3.5 PROBLEME SPECIFICE DE PROIECTARE
3.5.1 Autentificarea
Proiectarea unei strategii eficiente de autentificare este importantă pentru securitatea și fiabilitatea aplicației. O autentificare necorespunzătoare sau slabă poate lăsa aplicația vulnerabilă la atacuri spoofing și de dicționar. Atunci când se proiectează strategia de autentificare trebuie respectate următoarele principii:
Identificarea limitelor de încredere din straturile aplicației web. Acest lucru ajută la specificarea locației de autentificare a utilizatorilor.
Punerea în aplicare a practicilor de gestionare precum deconectarea conturilor și de expirare a parolelor, precum și politici puternice de parolă ce specifică numărul minim de caractere și complexitatea.
Folosirea unei platfome sau mecanisme de autentificare precum Windows Authentication atunci când este posibil.
Parolele nu trebuie salvate în baza de date ca text clar; în schimb trebuie salvat un hash al parolei.
3.5.2 Autorizarea
Autorizarea determină sarcinile ce o identitate autentificată le poate efectua, și identifică resursele ce pot fi accesate. Proiectarea unei strategii de autorizare eficiente este importantă pentru securitatea și fiabilitatea aplicației. O autorizare necorespunzătoare sau slabă conduce către dezvăluirea de informații, falsificarea de date , precum și elevația privilegiilor. În proiectarea strategiei de autorizare trebuie respectate următoarele principii:
Autorizarea utilizatorilor atunci când trec limitele de încredere. Folosirea autorizării URL pentru controlul paginii și al accesului la director.
Trebuie luată în considerare granularitatea setărilor de autorizare. O autorizare ce conține prea multă granularitate va mări costurile de administrare, însă, folosirea unei granularități mai mici s-ar putea să reducă flexibilitatea.
3.5.3 Folosirea cache-ului
Folosirea cache-ului îmbunătățește pervormanța și capacitatea de reacție a aplicației. Cu toate acestea, folosirea unor opțiuni incorecte de cache și o proiectare slabă de cache pot degrada performanța și capacitatea de reacție. Atunci când se implementează cache-ul trebuie stabilit în primul rând când se încarcă datele în acesta. În proiectarea cache-ului trebuie luate în considerare următoarele principii:
Adăugarea datelor în cache într-un format gata de utilizare și evitarea folosirii de date volatile ce se schimbă regulat în cache.
Trebuie evitată adaugarea datelor sensibile în cache, cu excepția a celor ce sunt criptate.
Folosirea cache-ului de ieșire pentru a adăuga paginile statice în cache. Acest lucru îmbunătățește într-un mod dinamic performanța.
3.5.4 Administrarea excepțiilor
Proiectarea unei strategii eficientă de administrare a excepțiilor este importantă pentru securitatea și fiabilitatea aplicației, iar manipularea corectă a excepțiilor previne ca detaliile sensibile ale excepțiilor să fie afișate utilizatorului și îmbunătățește robustețea aplicației. În proiectarea strategiei de administrare a excepțiilor trebuie luate în considerare următoarele principii:
Afișarea mesajelor de eroare într-un mod prietenos pentru a notifica utilizatorii despre erorile din aplicație, fără a expune date sensibile în paginile de eroare, mesajele de eroare sau în fișierele de loguri.
Trebuie procesate și excepțiile ce nu sunt administrate, iar acest lucru se realizează printr-un mesaj global ce afișează o pagină de eroare globală sau un mesaj de eroare pentru toate excepțiile ce neadministrate.
3.5.5 Aspectul paginilor
Aplicația trebuie proiectată astfel încât aspectul paginilor să fie separat de componentele UI și de procesarea UI. În proiectarea strategiei de aspect trebuie respectate următoarele principii:
Folosirea fișierelor CSS pentru îmbunătățirea aspectului oricând este posibil, decât folosirea unui aspect bazat pe tabel. Cu toate acestea, se poate folosi și un aspect bazat pe tabel atunci când trebuie afișate date în formatul de tabel, însă randarea paginilor se va realiza mai încet.
Folosirea unui aspect comun al paginilor pentru maximizarea accesibilității și ușurinței de utilizare. Trebuie evitată proiectarea și dezvoltarea de pagini largi ce realizează sarcini multiple, în special în cazul când numai câteva sarcini sunt executate la fiecare cerere. De asemenea, este foarte importantă și minimizarea dimensiunilor unei pagini pentru a maximiza performanța și a reduce cerințele lățimii de bandă.
Folosirea paginilor master pentru a oferi un aspect și comportament comun pentru toate paginile, și pentru a permite actualizarea site-ului printr-un effort minim.
Trebuie luate în considerare utilizarea comenzilor de server ASP.NET AJAX și a librăriei client-side ASP.NET AJAX pentru porta mai ușor scripturile client între diferitele browsere. De asemenea, trebuie evitată amestecarea scripturilor client-side cu codul HTML.
Adăugarea scripturilor client-side în fișiere separate pentru ca acestea să poată fi adaugate în cache-ul browserului.
3.5.5 Randarea paginilor
Pentru proiectarea modului în care se randează paginile trebuie luate în considerare utilizarea unui script client-side sau ASP.NET AJAX pentru o experiență UI îmbunătățită și o sensibilitate mai bună prin reducerea numărului de post back-uri necesare. Folosirea scripturilor client-side personalizate poate face aplicația mai greu de testat deoarece suportul scripturilor variază între browsere și versiuni, în schimb, ASP.NET AJAX suportă toate browserele comune.
3.6 CONSIDERAȚII DE PROIECTARE PENTRU STRATURI
3.6.1 Stratul de prezentare
Stratul de prezentare afișează interfața cu utilizatorul și facilitează interacțiunea cu utilizatorul. Design-ul trebuie să se concentreze asupra separării intereselor, unde logica de interacțiune cu utilizatorul este decuplată de la componentele UI. Aceste componente UI trebuie separate de componentele prezentării logice în interfețele complexe.
Pentru aplicațiile web, stratul de prezentare este alcătuit dintr-o componentă server-side (ce randează HTML-ul) și o componentă client-side (browser-ul sau agentul de utilizator ce execută scripturile și afișează HTML-ul). De obicei, toată logica de prezentare se află în componentele serverului, și componentele clientului afișează numai HTML-ul. Cu tehnici client-side precum AJAX, este posibilă executarea părții logice pe client, de obicei pentru a îmbunătăți experiența cu utilizatorul.
3.6.2 Stratul aplicativ
În proiectarea stratului aplicativ al aplicației web, se ia în considerare cum se implementează logica de aplicare și fluxurile de lucru de lungă durată. Folosirea separată a unui strat aplicativ ce implementează logica aplicativă și fluxul de lucru poate îmbunătăți mentenabilitatea și testabilitatea aplicației.
Stratul aplicativ trebuie proiectat independent, ceea ce ajută la reducerea resurselor și creșterea performanței.
3.6.3 Stratul de date
Stratul de date trebuie proiectat pentru a abstractiza logica necesară în acesarea bazei de date. Folosirea unui strat de date separat face aplicația mai ușor de configurat, întreținut și ascunde detaliile bazei de date de celelalte straturi ale aplicației. Este importantă proiectarea entităților obiect ce pot fi populate de către stratul de date sau folosite pentru actualizarea sursei de date, și folosirea obiectelor de transfer de date (DTO) în interacțiunea cu alte straturi și pentru a trimite date între straturi.
Stratul de date trebuie proiectat pentru a profita de gruparea conexiunilor pentru minimizarea numărului al conexiunilor deschise, iar pentru a reduce cererile către baza de date trebuie folosite operațiunile de pachete. Stratul de date ar putea avea nevoie de asemenea de accesarea serviciilor externe prin utilizarea agenților de servicii.
4. REALIZAREA APLICAȚIEI WEB
În acestă aplicație web conținutul este împărțit în diverse categorii și subcategorii, pentru o mai bună organizare a site-ului și dezvoltarea unei structuri de navigare corespunzătoare pentru a ușura modul în care utilizatorii găsesc informația dorită, astfel încât aceștia să nu părăsească dezamagiți aplicația.
Aceste categorii (secțiuni) sunt structurate în pagini web simple ce conțin propoziții clare și concise, iar fiecare pagină web să nu se desfășoară pe mai mult de două ecrane deoarece utilizatorii preferă să citească informația structurată în bucăți mici.
Nimănui nu-i place să deruleze pagina de mai multe ori pentru a o citi în întregime. În paginile web ale aplicației a fost folosită o structură piramidală a conținutului, furnizând la început ideile principale și urmate de dezvoltarea acestora.
Această aplicație permite persoanelor să găsească și să organizeze excursii online (figura 4.1), oferindu-le posibilitatea utilizatorilor înregistrați de a crea, edita sau de a șterge excursii și impune un set consistent de reguli de validare (figura 4.2). Vizitatorii pot folosi o hartă bazată pe AJAX pentru a căuta excursii corespunzătoare locației introduse de aceștia (fig. 3.3), iar accesarea unei excursii îi va redirecționa către o pagină cu detalii unde aceștia pot afla mai multe despre excursie (fig. 3.4). Pentru a participa la excursia selectată, vizitatorii trebuie să se conecteze sau să se înregistreze pe aplicația web (figura 4.5), iar după aceea ei pot face click pe un link bazat pe AJAX pentru a participa la excursie (figura 4.6 și figura 4.7).
Fig. 3.3. Căutare excursie.
Fig. 3.4. Detalii excursie.
4.1 Design
Elementele vizuale ale oricărui site web pornesc de la o schemă ce conține culori de bază, ceea ce este esențial pentru oferirea unui stil unic paginii web. Web design-ul are scopul exprimat atât prin informația transmisă textual, cât si prin folosirea unei combinații adecvate de culori ce pune în evidență mesajul oferit spre transmitere. În plus, este definită o adevărată psihologie atunci când de alege schema de culoare, deoarece aceasta se bazează pe educația, cultura și personalitatea utilizatorilor, întrucât este demonstrată acțiunea culorii pentru subconștientul uman.
Atunci când se realizează un site web este foarte importantă alegerea culorilor, deoarece vizitatorul observă prima data culoarea și grafica, asftel toate culorile folosite pe site-ul web au un impact psihologic puternic asupra utilizatorului.
Așadar, respectând cele spuse mai sus, am folosit o schema de culoare compusă din trei culori:
Negru – culoare considerată ca fiind una dintre cele mai stilate și rafinate culori, aceasta exprimând eleganță și rafinament.
Verde – această culoare exprimă ambiție, seriozitate, durabilitate și continuă dezvoltare. Un alt aspect important este faptul că această culoare este asociată naturii și înlătură stresul prin oferirea unei stări de spirit pozitive.
Albastru – este culoarea agreată de majoritatea persoanelor, fiind asociată cu încrederea, profesionalismul și seriozitatea.
Principalele informații despre utilizarea și caracteristicile aplicației se află pe pagina principală (figura 4.1).
4.2 Navigare
Așa cum se poate observa, conținutul acestui site este structurat, pe orizontală, în cinci categorii principale. Acestea sunt împărțite, la rândul lor pe nivele sau subcategorii (maxim două).
Fiecare vizitator poate naviga cu ușurință prin paginile acestui site web și în același timp poate găsi ușor informațiile de care are nevoie, deoarece sistem-ul de navigare este eficient și logic, iar fiecare pagină conține nu mai puțin de patru scheme de navigare.
În partea superioară a site-ului se află meniul principal cu legături text și poziție fixă. Acesta poate fi accesat de orice vizitator, indiferent de versiunea browser-ului pe care-l folosește și chiar în condițiile dezactivării opțiunii de încărcare a imaginilor. În acest meniu se află atât legături către paginile principale ale site-ului cât și legături către paginile aferente secțiunii respective. În acest mod, vizitatorul poate să sară la paginile din secțiunea respectivă sau, dacă nu-l interesează, să citească pagina principală dintr-o altă secțiune a site-ului.
Meniul de navigare este responsive, adică acesta iși va adapta dimensiunile și conținutul în funcție de dimensiunea ecranului, astfel:
Ecrane cu dimensiunea mai mare de 990px:
Ecrane cu dimensiunea maximă de 990px (telefoane mobile și tablete):
Navigarea către paginile web ale aplicației se realizează prin următoarele elemente:
Logo – poziționat în partea din stânga a meniului, este o legătură către prima pagina a site-ului ce se activează atunci când utilizatorul face click pe acesta. Elementul cheie din compoziția acestui logo îl reprezintă o mașină ce se află pe un drum, sugerând ideea de călătorie
Link text „Acasă” – redirecționează utilizatorul către pagina principală a site-ului.
Link text „Caută” – redirecționează utilizatorul către pagina de căutare a excursiilor.
Link text „Organizează” – redirecționează utilizatorul către pagina de organizare a unei excursii.
Link text „Contact” – redirecționează utilizatorul către pagina de contact.
Link text „Conectare” – redirecționează utilizatorul către pagina de conectare. După ce operațiunea de conectare a utilizatorului s-a efectuat cu succes, acest link este înlocuit automat cu numele de utilizator al persoanei conectate și conține un submeniu cu două elemente: „Modificare parolă” ce redirecționează utilizatorul către pagina ce îi permite sa modifice parola curenta cu una nouă și „Deconectare” ce deconectează utilizatorul.
Atunci când utilizatorul face click pe oricare dintre link-urile text aflate în meniul de navigare, link-ul text activ se va diferenția de celelalte printr-o altă culoare de fundal pentru ca utilizatorul să știe tot timpul pe ce pagină se află.
4.1 CREAREA BAZEI DE DATE
O nouă bază de date SQL Server Express se crează prin selectarea comenzii din meniu Add → New Item (figura 4.1), ceea ce conduce la afișarea unei noi ferestre din care se selectează opțiunea „SQL Server Database” corespunzătoare categoriei „Data” (figura 4.2).
Fig. 4.1. Selectarea comenzii din meniu pentru adăugarea bazei de date
Fig. 4.2. Adăugarea bazei de date de tipul SQL Server Database.
După ce a fost selectată comanda pentru crearea unei baze de date, aceasta va fi adăugată în tab-ul „Solution Explorer” (figura 4.3).
Fig. 4.3. Identificarea bazei de date.
4.1.1 Adăugarea tabelelor în baza de date
Tabelele se vor adăuga în baza de date prin navigarea la tab-ul ”Server Explorer” din Visual Studio, ce permite administrarea bazelor de date și a serverelor. Baza de date SQL Server Express stocată în folderul „\App_Data” din aplicație va fi afișată automat în fereastra Server Explorer (figura 4.4).
Fig. 4.4. Accesarea bazei de date din Server Explorer
Se vor adăuga două tabele în baza de date, unul pentru stocarea excursiilor, iar celălalt pentru a reține persoanele ce participă la excursie. Tabelele se adaugă prin selectarea comenzii „Add New Table” din folderul „Tables” (figura 4.5), ceea ce va deschide un proiectant de tabele ce permite configurarea schemei tabelului.
Fig. 4.5. Selectarea comenzii pentru adăugarea unui nou tabel.
Pentru tabelul „Trips” vor fi adăugate treisprezece coloane de date cu cheia primară setată pe coloana „TripID” (figura 4.6). În plus, coloana „TripID” va fi incrementată automat pe măsură ce sunt adăugate rănduri noi cu date în tabel (ceea ce înseamnă că prima excursie va avea id-ul 1, cea de-a doua excursie va avea id-ul 2, etc).
Fig. 4.6. Structura tabelului „Trips”.
Pentru tabelul „RSVP” vor fi adăugate trei coloane de date cu cheia primară setată pe coloana „RsvpID”, cu proprietatea de incrementare automată (figura 4.7).
Fig. 4.7. Structura tabelului „RSVP”.
4.1.2 Setarea cheii străine
Cheia străină are rolul de a seta relația „unu-la-mai-mulți” dintre cele două tabele, astfel încât fiecare rând din tabelul Trips va putea fi asociat cu zero sau mai multe rânduri din tabelul RSVP. Pentru setarea cheii străine se configurează coloana „TripID” din tabelul „RSVP” pentru a avea o relație de cheie străină corespunzătoare coloanei „TripID” din tabelul „Trips” (figura 4.8).
Fig. 4.8. Relația dintre cele două tabele.
4.2 Logica CRUD
În fișierul controller „TripsController” este implementat scenariul CRUD (Create,Read,Update,Delete) pentru crearea, citirea, actualizarea și ștergerea excursiilor din baza de date. Pentru realizarea acestui scenariu sunt publicate adrese URL ce interacționează cu metodele HTTP GET și HTTP POST (tabelul 4.1).
Tab. 4.1. Metodele HTTP POST și HTTP GET din controller-ul TripsController.cs
4.3 Metoda de înregistrare a utilizatorilor la o excursie
În fișierul controller „RSVPController” se implementează metoda de Register ce primește un id ca argument pentru o excursie, preia obiectul Trip corespunzător, verifică dacă utilizatorul înregistrat este în lista persoanelor care s-au înregistrat la excursie, iar caz contrar se adaugă un obiect RSVP:
public class RSVPController : Controller
{
TripRepository tripRepository = new TripRepository();
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(int id)
{
Trip trip = tripRepository.GetTrip(id);
if (!trip.IsUserRegistered(User.Identity.Name))
{
RSVP rsvp = new RSVP();
rsvp.AttendeeName = User.Identity.Name;
trip.RSVPs.Add(rsvp);
tripRepository.Save();
}
return Content("Înscrierea la excursia " + trip.Title + " a fost efectuata cu succes");
}
}
Codul de mai sus returnează un simplu text ca ieșire a metodei de intrare ce indică utilizatorului faptul că a fost înregistrat cu succes la excursie. Altă metodă pentru afișarea acestui mesaj este includerea lui într-un template view, dar deoarece nu are o dimensiune mare se folosește metoda ajutătoare Content() în clasa de bază a controller-ului.
Atunci când un utilizator navighează către o excursie la care nu este înregistrat va observa un link de participare ce este vizibil după ce acesta a introdus cheia excursiei furnizată de organizator, iar în cazul în care cheia introdusă este corectă va apărea butonul ce îi permite utilizatorului să participe la excursie, altfel va fi indicată o eroare.
Fig. 4.9. Înscriere la excursie.
Dacă utilizatorul face click pe butonul „Participă” se va face un apel AJAX la metoda Register din controller-ul RSVPController ce înregistrează utilizatorul la excursia respectivă și furnizează mesajul de confirmare (figura 4.10).
Fig. 4.10. Confirmare înscriere.
4.4 Organizarea și editarea excursiilor
Pentru organizarea sau editarea unei excursii este folosit un view parțial ce randează același conținut pentru ambele formulare din cele două pagini (figura 4.11). Un view parțial are rolul de a optimiza și refactoriza codul din aplicație, astfel încât acest view poate fi folosit ca un template în randarea unui număr multiplu de pagini.
Formularul conține opt câmpuri ce sunt marcate ca obligatorii:
Organizator;
Nume Excursie;
Locație;
Țara;
Data de început;
Data de sfârșit;
Descriere;
Telefon.
Pe lângă aceste câmpuri obligatorii mai există și alte două câmpuri opționale:
Cheie Excursie – este furnizată de organizatorul excursiei persoanelor ce doresc să participe;
Poză – organizatorul adaugă o poză specifică descrierii excursiei.
Fig. 4.11. Formular de organizare/editare excursie.
Data de început și data de sfârșit a excursiei pot fi selectate de utilizator prin intermediul unui calendar. Data de început a excursiei trebuie să fie la cel puțin două zile după data curentă, spre exemplu dacă data curentă este 2.06.2016 utilizatorul va putea selecta numai o zi după data de 4.06.2016, inclusiv (figura 4.12).
Fig. 4.12. Validarea datei pentru începutul excursiei.
Data de sfârșit a excursiei îi permite utilizatorului să selecteze o dată la cel puțin două zile după data de început (figura 4.13), astfel încât o excursie trebuie să se desfășoare pe parcursul a cel puțin două zile.
Fig. 4.13. Validarea datei pentru sfârșitul excursiei.
Atunci când utilizatorul omite să introducă date într-unul din câmpul obligatorul va fi atenționat prin mesaje de eroare ce indică numele câmpului omis (figura 4.14). Toate câmpurile obligatorii necompletate vor fi marcate printr-o culoare de fundal diferită, caracteristică mesajelor de eroare.
Validarea pentru câmpul corespunzător numărului de telefon depinde de țara selectată și este împlementată printr-o expresie Regex ce verifică numărul total al cifrelor, prefixul țării și caracterele utilizate, astfel încât numărul de telefon introdus să corespundă țării specificate.
Fig. 4.14. Mesaje de eroare.
Atât pagina de organizare cât și cea de editare a unei excursii conțin o hartă implementată cu AJAX ce oferă utilizatorilor posibilitatea de a vedea în timp real (fără a fi nevoie să facă refresh la pagina) poziția pe hartă a locației specificate (figura 4.15). Semnul adăugat pe hartă se va repoziționa în cazul în care este introdusă o noua locație în locul celei vechi deoarece se vor actualiza valorile pentru latitudinea și longitudinea locației specificate. Atunci când utilizatorul pozitionează cursorul mouse-ului peste semnul adaugat pe hartă se va deschide automat o bulină text în care sunt specificate locația și țara excursiei.
Fig. 4.15. Actualizarea hărții.
4.5 Căutarea excursiilor
Vizitatorii pot folosi o hartă bazată pe AJAX pentru a căuta excursii corespunzătoare locației introduse de aceștia ce actualizează în timp real harta prin adaugarea unui marker în locația excursiei. Atunci când utilizatorul pune cursorul mouse-ului peste un marker va fi afișată o bulină text în dreptul acestuia ce conține detalii despre titlul, descrierea și numărul participanților la excursie (figura 4.16).
Fig. 4.16. Căutarea excursiilor.
În cazul în care căutarea returnează una sau mai multe excursii în locația respectivă acestea sunt vizibile sub hartă, împreună cu titlul și numărul persoanelor înscrise, iar utilizatorul le poate accesa pentru a deschide pagina ce conține detalii suplimentare despre excursie.
Utilizatorii pot de asemenea sa acceseze link-ul „Listă Excursii” ce îi va redirecționa către o pagină ce conține toate excursiile programate și detalii amănunțite despre acestea (figura 4.17).
Fig. 4.17. Lista excursiilor.
Pagina ce conține lista excursiilor nu afișează în mod direct un număr foarte ridicat de excursii, iar pentru ca interfața cu utilizatorul să poată suporta toate excursiile a fost adăugat un suport de paginare afișează maxim 10 excursii la un moment dat prin permiterea utilizatorilor de a derula pagina înainte și înapoi astfel încât sa poată accesa întreaga listă cu excursii. Tabelul din această pagină conține următoarele coloane ce oferă informații despre excursii:
Nume – link către pagina cu detalii ale excursiei;
Data – zilele în care va avea loc excursia;
Locație – locația excursiei;
Imagine – imaginea caracteristică excursiei sau locației în care se desfăsoară. Această coloană va fi populată numai dacă organizatorul excursiei a adăugat o imagine pentru excursia creată.
Pentru a vizualiza imaginea excursiei la dimensiunea originală se poate face click pe aceasta (figura 4.18).
Fig. 4.18. Imaginea specifică excursiei.
Atunci când utilizatorul derulează lista ce conține excursiile, URL-ul va primi ca parametru pagina curentă ce conține lista, precum /Trips?page=2 corespunzătoare paginii cu numărul 2 din lista totală a excursiilor.
4.6 Formular de contact
Utilizatorul are posibilitatea de a accesa pagina de contact pentru a trimite un email către administratorul aplicației web sau pentru a găsi răspuns la întrebări frecvente ce pot apărea în utilizarea aplicației web (figura 4.19).
Fig. 4.19. Formular de contact.
4.6.1 Implementarea formularului de contact
Codul prezentat în rândurile următoare se apelează la apăsarea butonului TRIMITE din pagina de contact și are rolul de a trimite în mod dinamic către serverul de gmail un email cu datele completate de utilizator.
public class SendMailController : Controller
{
public ActionResult Index(EmailFormModel vm)
{
if (ModelState.IsValid)
{
MailMessage msz = new MailMessage(); // crearea unui obiect MailMessage
vm.Email.ToString(); // convertirea catre tipul string a emailului
msz.From = new MailAddress(vm.Email,vm.Name); // emailul și numele utilizatorului
msz.To.Add("[anonimizat]"); // adresa de email a administratorului
msz.Subject = vm.Subject; // subiectul emailului
msz.Body = vm.Message; // corpul emailului
SmtpClient smtp = new SmtpClient(); // crearea unui obiect SmtpClient
smtp.Host = "smtp.gmail.com"; // hostul pe care se trimite email-ul
smtp.Port = 587; // port-ul host-ului
// adresa de email și parola contului unde sunt primite email-urile
smtp.Credentials = new System.Net.NetworkCredential("email", "password");
smtp.EnableSsl = true; // setarea valorii true pentru functia EnableSsl
smtp.Send(msz); // apelarea funcției Send pentru a trimite email-ul
ModelState.Clear(); // stergerea datelor din formularul de contact
}
}
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie Pentru Organizarea Excursiilor Folosind Tehnologiile .net (ID: 109943)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
