Sunteți pe pagina 1din 50

Aplicaie WEB pentru rezervare de bilete online

Cuprins:
Administrarea paginilor WEB folosind ASP.NET ........................................................................................... 5 Introducere n aplicaii WEB...................................................................................................................... 5 Comunicarea cu serverul .......................................................................................................................... 7 Limbajul XHTML ........................................................................................................................................ 9 Formulare.................................................................................................................................................. 9 ASP.NET ................................................................................................................................................... 11 Ce e gresit la ASP-ul clasic? ................................................................................................................. 11 Limbajele de scriptare ......................................................................................................................... 12 Ce aduce ASP.NET? ............................................................................................................................. 12 Tipuri de fiiere n ASP.NET ................................................................................................................. 13 Modelul de cod ................................................................................................................................... 14 Controale Web i controale HTML ...................................................................................................... 15 Postback .............................................................................................................................................. 15 Meninerea strii prin Viewstate........................................................................................................ 16 Ciclul de via al unei pagini ................................................................................................................ 17 Forme Web i colecia de controale din pagin ................................................................................ 18 Request ............................................................................................................................................... 18 Response ............................................................................................................................................. 18 Server .................................................................................................................................................. 19 Controale server HTML ....................................................................................................................... 20 Controale Web server ......................................................................................................................... 21 Gestiunea starii n ASP.NET ................................................................................................................. 22 Query String ........................................................................................................................................ 22 Cookies ................................................................................................................................................ 23 Sesiunea .............................................................................................................................................. 23 Application .......................................................................................................................................... 24 Validatoare .......................................................................................................................................... 24 Paii de validare .................................................................................................................................. 25 Clasa BaseValidator ............................................................................................................................. 25

Validatorul RequiredFieldValidator .................................................................................................... 26 Validatorul RangeValidator ................................................................................................................. 26 Validatorul CompareValidator ............................................................................................................ 26 Validatorul RegularExpressionValidator ............................................................................................. 27 Controlul CustomValidator ................................................................................................................. 27 Controlul ValidationSummary ............................................................................................................. 27 Grupuri de validare ............................................................................................................................. 27 Cascading Style Sheets ........................................................................................................................ 28 Teme ................................................................................................................................................... 28 Pagini master ...................................................................................................................................... 29 Legarea la date .................................................................................................................................... 30 Elemente de baz JavaScript ............................................................................................................... 30 ASP.NET membership ......................................................................................................................... 31 Crearea unei pagini de login ............................................................................................................... 32 NHibernate .................................................................................................................................................. 32 Avantajele folosirii NHibernate ............................................................................................................... 33 Fiierul de mapare XML hbm.xml ........................................................................................................... 33 Expunerea bazei de date......................................................................................................................... 34 Relaionare .............................................................................................................................................. 35 Normalizarea ........................................................................................................................................... 36 Clase ........................................................................................................................................................ 36 Proprieti publice i variabile private ................................................................................................... 36 Proprieti pentru chei strine .............................................................................................................. 37 Maparea datelor ..................................................................................................................................... 38 Maparea XML ...................................................................................................................................... 38 Maparea Fluent ................................................................................................................................... 39 Ce este o sesiune NHibernate? ............................................................................................................... 40 Session factory ........................................................................................................................................ 40 Crearea unei sesiuni n NHibernate ........................................................................................................ 40 Sesiunea NHibernate versus sesiunea bazei de date.......................................................................... 41 Sesiuni n ASP.NET................................................................................................................................... 41 Configurare ............................................................................................................................................. 41

Abstractizarea configuraiilor.................................................................................................................. 43 Metode de acces ale obiectelor .............................................................................................................. 43 Structura FieldNames.............................................................................................................................. 44 Obiectul ICriteria ..................................................................................................................................... 44 Filtrare ICriteria ....................................................................................................................................... 45 Legarea datelor ....................................................................................................................................... 46 Controlul <asp:ListView> ........................................................................................................................ 47 Controlul <asp:ObjectDataSource> ........................................................................................................ 47 Legtura directa .................................................................................................................................. 47 Controale intregrate ............................................................................................................................... 48 Securitatea locaiei.................................................................................................................................. 48 Roluri pe baz de utilizatori .................................................................................................................... 48 Configurarea furnizorului ........................................................................................................................ 49 Conversia template-urilor CSS ................................................................................................................ 50

Administrarea paginilor WEB folosind ASP.NET


Introducere n aplicaii WEB
O aplicaie Web este un program care este stocat pe un server Web,acesta putnd fi accesat prin intermediul unui browser folosind reeaua. La un capt al acestei comunicaii se afl un server (program dedicat) care accept interogri, formulate prin protocolul HTTP, serverul putnds serveasc pagini web statice (fiiere scrise n limbaj HTML) sau resurse statice (imagini, fiiere PDF etc.). Exemple de servere folosite n prezent: Apache este cel mai rspndit n acest moment; fiind capabil s ruleze pe o multitudine de sisteme de operare; conform Netcraft, n septembrie 2009, 54,48% din site-uri rulau Apache; IIS = Internet Information Services, creat de ctre Microsoft pentru a fi folosit pe sistemele de operare Windows; disponibil pe windows 2000 (IIS 5), Windows XP Professional (IIS 5.1), Windows Server 2003 (IIS 6), Windows 2008 (IIS 7.0 i 7.5), Windows Vista anumite versiuni (IIS 7.0), Windows 7 anumite versiuni (IIS 7.5). IIS este folosit n dezvoltarea aplicaiilor ASP.NET. Conform Netcraft n luna precizat mai sus 19.91% din site-uri rulau o variant de IIS.

La cellalt capt, se afla un browser (fie el Internet Explorer, Mozila Firefox, Safari, Google Chrome sau Opera cele mai utilizate la ora actual. Utilizatorul trebuie s indice care adresa de Web la care se afl pagina dorit. Acestea doua formeaza un tip de comunicare numit client-server, clientul fiind browserul, iar serverul este cel care rspunde prin furnizarea unei pagini web(n cazul n care se poate). Browserul este de fapt un aa numit thin client1; nu necesit instalarea local a unor componente (cu excepia browserului, utilizabil pentru toate site-urile), i nici drepturi de administrator pe maina pe care lucreaz. Un avantaj al acestor aplicaii web este faptul c dac se schimb o parte din aplicaie, aceast modificare se face ntr-un singur loc pe server. Clientul (browserul) fiind insensibil la aceast manevr i nu trebuie actualizat n niciun fel.

Un calculator sau un program care depinde de alte calculatoare (server) pentru a-i realiza atribuiile

Nu este important platforma sau sistemul de operare pe care ruleaz browserul, deoarece paginile Web reprezint doar text care este neles de ctre orice sistem. Exist ns mici diferene ntre modul n care un browser deseneaz pagina pe ecran.Acest lucru se datoreaza faptului c HTML reprezint nite specificaii despre cum ar trebui s fie desenat un anumit cod HTML, dar cei care creeaz browsere nu iau acest fapt ca pe o obligaie. Ca un neajuns al acestui tip de aplicaii: dac reeaua devine indisponibil, aplicaia web nu poate fi accesat. Rezolvarea acestei situaii se face print-un al treilea tip de aplicaii (pe lng cele thin i thick): smart applications2. Modele clasice de realizare a aplicaiilor Web: Soluia CGI3 - reprezint o serie de scripturi executate peserverul we,ce pot fi scrise n orice limbaj de programare (interpretat sau compilat).Aceste trebuie s respecte urmtoarele restricii: programul scrie datele la ieirea standard i nu genereaza antete care permit browserului s interpreteze corect ieirea scriptului, conform specificaiilor HTTP. Se pot folosi limbaje precum bash, Perl, C/C++, Delphi. Neajunsul CGI-urilor l reprezint faptul c se creaz unu nou proces pe serverul Web pentru fiecare cerere, ceea ce la un numr mare de cereri este prohitiv. Soluia ISAPI4 - este o alternativ CGI pe platforma Windows. Dezvoltatorii Win32 pot scrie un program capabil s comunice direct cu aceast interfaa pentru a face orice lucru posibil cu CGI, pot folosi ISAPI pentru a obine date din formulare i pentru a trimite coninut HTML la client. Codul la nivel de server poate fi scris n oricare limbaj cu suport pentru DLL-uri Windows, precum C/C++, Visual Basic, rezultatul compilarii fiind un fiier .dll. Spre deosebire de CGI, ISAPI ruleaz n acelai spaiu de adrese cu serverul HTTP, avnd acces la toate resursele serverului HTTP, pot fi incluse mai multe task-uri ntr-un .dll i nu creeaza procese adiionale pentru rezolvarea cererilor clienilor Web. Soluia PHP5 (1994) sau ASP6 (1996) marcheaz un salt n dezolvatarea aplicaiilor Web. Cele dou limbaje difer din punct de vedere al sintaxei, nsa ambele sunt interpretate, codul lor fiind stocat n fiiere externe cu extensia .php/.asp. De fapt, ASP nu ofer un limbaj nou, ci se bazeaz pe limbajele VBScript i Jscript. Un fiier PHP/ASP poate fi combinat cu date de tip text, marcatori HTML i comenzi script, n momentul execuiei,n urma cererii unui client Web, fiierul este procesat, fiecare script din cadrul lui este interpretat i rezultatul execuiei este introdus napoi n fiierul static HTML nainte ca rezultatul s fie trimis ctre browser. Limbajele pun la dispoziie o serie de metode i obiecte care uureaz lucrul cu cookie-uri, cu bazele de date, care preiau elegant intrrile unui formular HTML i le proceseaz la server, care preia informaii despre utilizator (clientul Web), care trimit informaii la utilizator, care stocheaz informaii despre sesiunea unui utilizator, care partajeaz informaii ntre utilizatorii unei aplicaii.

Aplicaii ce pot rula i n mod deconectat avnd doar o parte din funcionaliti active (client de email Outlook sau Mozila Thunderbird). 3 Common Gateway Inteface 4 Internet Server Application Programming Interface 5 Hypertext Preprocessor 6 Active Server Pages

JSP7- permite crearea de aplicaii Web independente de platform. Acesta separ interfaa utilizator de coninutul generat dinamic, permind shimbarea ntregului ablon al siteului WEB, fr a altera informaiile afiate. Tehnologia utilizeaz marcatori XML i scripturi scrise n limbajul de programare JAVA pentru a ncapsula logica aplicaiei care genereaz coninutul paginilor Web. JSP-urile sunt o extensie a tehnologiei Java Servlet8. Servlet-ele sunt complet independete de platforma i reprezint module la nivel de server ce se integreaz n cadrul unei aplicaii Web.Acestea pot fi utilizate pentru a extinde capabilitile unui server Web. Tehnologia JSP i servlet-urile ofer o alternativ pentru crearea aplicaiilor Web, fa de alte limbaje de scripting / programare a aplicaiilor WEB, oferind independen de platform, separarea logicii aplicaiei de partea de interfa utilizator, administrare uoar i extensibilitate.

Toate acestea au n comun faptul c serverul Web reprezint o interfa de comunicare cu procese externe. Separarea software-ului n diferite procese ofer avantajul de modularizare i uureaz procesul de integrare i n acelai timp extinde funciile web server-ului.

Server IIS folosind ASP.NET pentru generarea de pagini Web dinamice.

Comunicarea cu serverul

7 8

Java Server Pages O clasa a unui limbaj de programare folosit s extind capabilitile serverului, accesate de ctre aplicaii de tip host.

Paginile web sunt de obicei transmise i primite prin intermediul Internetului via HTTP (nesecurizat) sau HTTPS10(securizat).Dezvoltarea protocolului HTTP a fost supervizat de ctre World Wide Web Consortium.
9

HTTP este un standard de comunicare ce permite vehicularea de cereri i rspunsuri ntre client i un server. O cerere arat astfel: linie de cerere, precum GET / images/logo.gif HTTP/1.1, care cere o resurs numit /images/logo.gif/ de pe server; antete precum Accept-Language: en; o linie goal; un mesaj opional.

Cele mai importante metode de cerere prin care un client solicit ceva de la un server suntget i post. Un aspect esenial al comunicarii prin HTTP este faptul cHTTP este un protocol fr stare.Cu alte cuvinte, de cate ori un client efectueaz o cerere ctre un server, acesta rspunde cererii dup care ,,uit,, ceea ce a comunicat clientul; serverul nu menine nicio legatur cu browserul i nu menine resursele necesare pentru a raspunde clientului (cu o excepie minor, mecanismul de keep-alive11 care permite reutilizarea unei conexiuni pentru alte cereri); dac apar modificari ale pagini sau ale resurselor de date , atunci browserul nu este notificat n niciun fel. Limbajul HTML12 este limbajul predominant folosit pentru crearea paginilor Web. Acesta descrie structura, coninutul i modul de apariie al unei pagini; poate s includ referine ctre imagini, legatur ctre alte pagini, frame-uri, formulare i multe altele. Coninutul unui document HTML este un document de tip text ce se creaz pe baza unor elemente ( <p>, <a>, etc) care sunt definite de ctre limbaj. Un element are de obicei o etichet de deschidere i una de nchidere. Browserul dup primirea fiierului HTML va efectua o parsare a codului, de exemplu la ntlnirea unui element de tip img acesta face o cerere de tip get pentru a obine imaginea respectiv de pe server.

Hypertext Transfer Protocol Hypertext Transfer Protocol Secure 11 Mesaj trimis de un dispozitiv ctre alt dispozitiv pentru a verifica daca link-ul dintre cele dou este activ sau pentru a prevenii stricarea acestuia 12 Hypertext Markup Language
10

Limbajul XHTML13
Acest limbaj hibrid a fost creat cu scopul de a prelua trsturile limbajului XML. Chiar dac mai exist pagini HTML, exist o tendin constant de a se produce numai coninut XHTML, chiar i uneltele de dezvoltare se conformeaz acestei tendine. Implicit coninutul generat de ASP.NET este de tip XTHML. Astfel elementele de marcare satisfac o serie de reguli: etichetele i numele de atribute trebuie scrise cu litere mici; toate elementele trebuie s fie nchise, fie cu un tag de nchidere dedicat (<p></p>) fie filosind un tag gol care se nchide singur (<br />). toate atributele trebuie s aibe valorile incluse ntre ghilimele sau apostroafe (id=errorLabel). atributul id trebuie s fie folosit n locul atributului name (dar controalele ASP.NET generate vor avea amndou aceste atribute, din motive de compatibilitate cu codul JavaScript existent). elementele trebuie s fie imbricate corect: <p><a href="...">..</a></p> i nu <p><a href="...">..</p></a>. documentele XHTML trebuie s aibe un unic element rdcin; acesta este dat de eticheta html.

XHTML nltur suportul pentru cteva mecanisme existente n HTML, cum ar fi frameurile sau precizri stilistice care nu utilizeaza CSS14, sau folosirea atributului target pentru linkuri. Orice document XHTML trebuie s nceap cu o declaratie de tip de document, care definete tipul de XHTML folosit.

Formulare
Formularul este ce mai utilizat modalitate de trimitere de informaii dinspre browser spre server. Formularul conine elemente care suport specificarea de valori de ctre utilizator (cum ar fi numele i parola pe un formular de logare). Este de menionat faptul c dac formularul conine i alte elemente (imagini, linkuri, text etc) acestea nu sunt trimise la server, deoarece ele nu poart informaie de la utilizator. Un formular se declar folsind tagul <form>. Acesta are dou atribute importante: action i method .
13 14

eXtensible HyperText Markup Language limbaj de marcare care are aceleai capabiliti expresive ca i HTML Cascading Style Sheets un standard pentru formatarea elementelor unui document HTML

Atributul action arat care este pagina ctre care se va trimite coninutul formularului. Atributul method arat care din metodele get(implicit) i postsunt folosite pentru a trimite valorile ctre server. Valorile posibile sunt get i post. Cu get toate datele din formular sunt adugate la URL-ul specificat de atributul action. Partea de dup semnul de ntrebare din URL se numete query string15. Exist situaii n care folosirea metodei get este contraindicat deoarece lungimea maxim a URL-ului este limitat de ctre browsere. n cazul n care se specific metoda post, atunci setul de date din formular se include n corpul formularului i este trimis mai departe la server. URL-ul nu va fi modificat. Exist o diferen de comportament ntre get i post, getfiind considerat idempotent, adic acesta nu modific starea serverului la trimiteri repetate ale aceleai interogri, pe cnd post e gndit pentru a produce efecte colaterale pe server tranzacii financiare sau modificari de date. n interiorul unui formular pot fi folosite urmtoarele elementele de tip input: text - se folosete pentru crearea unor casue text, al cror coninut va fi furnizat de utilizator; password seamn cu cele de tip text, cu diferena c n momentul n care cineva scrie n interiorul lui, caracterele sunt suprascrise cu un caracter inert; checkbox este folosit atunci cnd utilizatorul trebuie s specifice dintr-un set de opiuni ne-mutual exclusive; radio permite alegerea a cel mult una din mai multe opiuni; submit modific un text folosind atribului value; reset realizeaz un buton pe care scrie textul ,,Reset,, i acesta va repune valorile din formular la cele cu care au venit de pe server; nu se face trimiterea formularului la server. Arat ca un buton de tip Submit; hidden - deseori este nevoie ca n cadrul formularului s existe nite date care s vin de pe server i s fie trimise napoi odat cu restul datelor din formular. Aceste cmpuri sunt considerate ascunse, n sensul c nu au o apariie vizual pe ecran; image - input-ul de tip imagine creeaz un control imagine care, atunci cnd este apsat trimite formularul ctre server. Locaia imaginii este definit prin atributul src; button - estece arat precum cel de Submit sau Reset,ns a crui apsare va fi procesat exclusiv prin cod JavaScript, n browser.

15

Este o parte din link folosit pentru a trimite date ctre o alt pagin

textarea - Input-ul de tip text este convenit a conine o singur linie. Pentru cazul n care se dorete existena unei casue text cu mai multe linii se poate folosi elementul textarea. select - elementul select permite alegerea dintr-o list derulant a uneia sau a mai multor opiuni. Lista de opiuni este format din perechi de forma cheie valoare, cheia (invizibil n pagina desenat de browser) fiind cea care se trimite ctre server, iar valoarea este folosit pentru a face alegerea efectiv.

ASP.NET
ASP.NET reprezint o platform pentru aplicaii web, dezvoltat i distribuit de ctre Microsoft, pe care dezvoltatorii o folosesc pentru a contrui site-uri web dinamice i servicii web. A fost lansat n ianuarie 2002 cu versiunea 1.0 a .NET Framework i este succesorul tehnologiei Active Server Pages (ASP) dezvoltat tot de ctre Microsoft. ASP.NET a fost construit pe CLR16, ceea ce permite programatorilor s scrie cod folosind orice limbaj suportat de .NET. ASP.NET este o tehnologie freeware17 de la Microsoft. ASP.NET poate fi folosit pentru a crea orice tip de aplicaie web, ncepnd de la mici site-uri personale pn la cele de tip business. Strictul necesar pentru a programa cu ASP.NET este reprezentat de .NET Framework i de Visual Web Developer Express Edition, ambele gratuite. Aplicaiile ASP.NET sunt aplicii web .NET complete care se execut ca i cod compilat gestionat de .NET runtime. ASP.NET folosete de asemenea capabilitaile complete a .NET Framework-ului o gam de clase la fel de uor de nteles ca i cele pentru o aplicaie Windows obinuit. n esen, ASP.NET ncearc s estompeze linia ntre dezvoltarea de aplicaii i dezvoltarea web prin preluarea instrumentelor i a tehnologiilor folosite de programatorii de aplicaii desktop.
Ce e gresit la ASP-ul clasic?

Spagetti code n momentul procesrii unei pagini ASP, motorul de scripting de pe se activeaz i se dezactiveaz de mai multe ori pentru a gestiona chiar i o singur cerere. Acest lucru crete cantitatea de timp necesar pentru a procesa ntreaga pagin i a o trimite la client. Mai mult, paginile web scrise n acest stil pot atinge uor dimensiuni dificil de stpnit.

16 17

Common Language Runtime responsabil pentru executarea programelor .NET Programe pentru calculator care au drepturi de autor nregistrare i sunt accesibile pentru a fi utilizate gratuit

Indiferent ce abordare se folosete, codul devine ncurcat, lung i greu de depanat. n ASP.NET, aceste probleme sunt reduse ca posibilitate de apariie. Paginile web sunt scrise folosind conceptele programrii orientate pe obiecte tradiionale. Paginile de web ASP.NET se regsesc controale, ce pot fi programate n mod similar cu aplicaiile desktop.Nu mai este nevoie de combinarea unui set de marcaje HTML i cod inline. Dac se opteaz pentru abordarea code behind atunci cnd se creaz paginile ASP.NET, codul i marcajul sunt plasate n doua fiiere diferite, ceea ce simplifica ntreinerea codului i permite separarea sarcinii de design a paginii web de cea destul de dificil a programrii.

Limbajele de scriptare

La nceput, ASP prea o solutie perfect pentru dezvoltatorii de aplicaii desktop care vroiau s treac la dezvoltare web,fr s necesite nvaarea unui limbaj de programare cu totul nou,acetia putnd s folosesc limbaje familiare cum ar fi VBScript. Folosind deja popularul COM18 ca o coloan vertebral, aceste limbaje au acionat ca un vehicul pentru accesarea componentelor i resurselor de pe server. Dei ASP era uor de neles pentru dezvoltatorii obinuii cu limbaje precum VBScript, aceasta a ridicat o alt problema, ASP fiind bazat pe tehnologii vechi, ce au fost iniial create pentru aplicaii desktop, acestea nu au putut s funcioneze la fel de bine n noul mediu de dezvoltare web. O alt problem este faptul c pentru fiecare obiect sau variabil utilizat n ASP clasic era creat ca un tip de dat variant. Un tip de data variant este slab tipizat, avnd nevoie de cantitai mari de memorie, iar tipul exact este cunoscut doar la momentul rulrii, de aici rezultnd c au performane mult mai slabe dect variabilele explicite. De asemenea, cu acest tip de variabile era imposibil de creat un IDE care s ofere faciliti de debugging, IntelliSense (recunoaterea elementelor lexicale) i verificarea erorilor.
Ce aduce ASP.NET?

Sunt o serie diferene majore ntre ASP.NET i platformele de dezvoltare existente: ASP.NET aduce modelul de programare n ntregime obiect-orientat, avnd o arhitectur bazat pe evenimente i controale, care ncurajeaz ncapsularea i refolosirea codului; ASP.NET ofer posibilitatea de a programa n orice limbaj acceptat de.NET;

18

Component Object Model folosit pentru a permite comunicarea ntre procese i crearea de obiecte dinamice n foarte multe limbaje de programare

ASP.NET sprijin ideea de executare rapid: n loc de a fi interpretate de fiecare dat cnd acestea sunt utilizate, paginile i componentele ASP.NET sunt compilate (fie la prima cerere, fie la instalarea site-ului pe server); modul de programare este orientat pe obiecte; orice pagin este vzut ca un obiect, derivat din clasa pus la dispoziie de .NET Framework; dei protocolul de comunicare HTTP este fr stare, are un mecanism ncorporat care permite pstrarea strii; ASP.NET permite dezoltarea de aplicaii web bazate pe evenimente, la fel ca n cazul aplicaiilor de tip forme Windows; este senzitiv la browserul pentru care se face trimiterea codului HTML, alegnd automat codul optimizat pentru o colecie de browsere; ASP.NET este gzduit de ctre CLR; aceasta aduce beneficii notabile precum: managementul automat al memoriei prin garbage collection19; tipuri de date sigure, verificabile; manipularea structurat a erorilor; fire de execuie -pentru fiecare cerere fcut de ctre un client, se lanseaz un fir de execuie separat; este uor de distribuit i configurat.

Tipuri de fiiere n ASP.NET

ntro aplicaie web sunt disponibile urmtoarele tipuri de fiiere: fiiere cu extensia aspx -- pagini web asp.net, ele conin interfaa utilizator i opional cod (JavaScript, C#); fiiere cu extensia ascx -- controale utilizator ASP.NET; reprezint controale personalizate, dezvoltate de programatori, prin care se extinde paleta de controale cu care vine ASP.NET; aceste controale pot fi adugate n pagini aspx; fiiere cu extensia asmx sau svc -- servicii web ASP.NET (prima extensie) sau servicii implementate prin WCF20; web.config fiier de configurare a aplicaiei Web pentru ASP.NET; conine stringuri de conexiune ctre baza de date, configurri ale securitii etc; global.asax -- fiier global al aplicaiei; se folosete pentru a implementa cod de reacie la evenimente ale aplicaiei, precum pornirea sau oprirea ei; fiiere cu extensia cs -- (n cazul ASP.NET cu C#), este partea de codebehind care prelucreaz pe server evenimentele survenite pe partea de browser i ciclul

19 20

O forma automat de gestiune a memoriei Windows Communication Foundation o parte a .NET Framework care ofer model de programare pentru construirea rapid de aplicaii

de via al paginilor.Astfel se obine separarea prii de interfa utilizator de cea de cod executat pe server; fiiere cu extensia ashx -- HTTP handlers, pentru returnarea de coninut care s nu fie pagina web; fiiere cu extensia axd -- folosite pentru urmrirea aplicaiei (tracing); fiiere cu extensia master -- pentru master pages; fiiere cu extensia resx -- pentru internaionalizarea i localizarea aplicaiilor ASP.NET; fiiere cu extensia sitemap -- pentru crearea structurii site-ului; fiiere cu extensia skin -- pentru crearea de teme (skinuri).

Modelul de cod

O pagin web aspx este compus din cod ASP.NET de forma: cod HTML; acesta este interpretat de ctre browser; controale web; acestea se recunosc prin tagurile care ncep cu prefixul asp.Controalele web sunt procesate pe server i vor produce cod HTML care este inteligibil pentru un browser; cod C# sau VB.NET. Acest ultim cod este executat pe server (deci browserul nu trebuie s aibe niciun tip de suport pentru executarea de cod .NET); n funcie de locaia n care se poate pune acest cod, avem posibilitile: cod inline, adic este scris n interiorul paginii aspx; utilizat pentru pagini web simple; cod n spate, ntr-un document separat cu extensia cs (dac este cod C#). Este modelul preferat pentru dezvoltarea de pagini.

Alegerea ntre aceste dou modaliti este posibil la crearea unei noi pagini web, prin checkbox-ul Place code in separate file. Browserul va primi acelai cod, deoarece interpretarea parii de C# i ASP.NET se face de ctre server. Este indicat folosirea de variante de code-behind, deoarece asta permite separarea prii de layout (ce este n sarcina unui designer) de cea de cod (sarcina de programator). n restul lucrrii ne vom referi doar la modelul de codebehind. Conectarea dintre pagina aspx i codebehind se face prin intermediul directivei Page de pe primul rnd. Se specific unde se afl pagina de codebehind (atributul CodeFile); de asemenea faptul c pagina aspx este de fapt un obiect, derivat din clasa care conine code-behind

(atributul Inherits). Controalele declarate n pagina aspx vor fi create automat, ntr-o clas parial, care completeaz n mod transparent codul din fiier.
Controale Web i controale HTML

Un control Web reprezint o clas (exemplu: System.Web.UI.WebControls.Label) ce poate fi utilizat n partea de codebehind; are un aspect vizual, generanduse cod HTML de ctre server, cod care poate fi interpretat de browser; are de asemenea aspect comportamental,evenimente, i proprieti de exemplu un obiect de tip Label poate s suporte modificri prin laime, text, culoare, vizibilitate. Avantajul acestor controale este c permit generarea de cod HTML complex, fr ca programatorul s fie interesat de detalii. Astfel, se creeaza programatorului senzaia c modul de dezvoltare al aplicaiilor web este foarte asemntor cu cel folosit pentru aplicaiile de tip Windows Forms, unde exist o abunden de controale. De exemplul <asp:Label...> dac conine atributul runat cu valoarea server care este mandatoriu (ca prezena i valoare) pentru controalele web. Valoarea atributului id reprezint numele variabilei cu care se acceseaza controlul pe parte de server. La cealalt extrem se afl codul HTML simplu, care este direct interpretat de ctre browser. Problema cu acest cod este c nu poate fi accesat de ctre code behind. Pentru a se permite accesarea programatic, sa introdus conceptul de control HTML, acesta se obine din codul HTML prin adugarea a dou atribute: runat cu valoarea server i Id avnd drept valoare un nume de variabil, iar accesarea controlului se face prin value sau text.
Postback

Un utilizator cere prin browser o pagin. Serverul IIS primete cererea, determin faptul ca este o pagin aspx i invoc motorul ASP.NET pentru a o executa. Motorul creeaz pagina i controalele coninute, se execut codul de iniializare. Pagina este creat ca ir de caractere HTML i returnat clientului. Obiectul pagin i controalele incluse sunt distruse . O dat pagina trimis ctre browser, este rndul utilizatorului s produc aciunea de trimitere napoi a paginii, acest lucru se realizeaza prin apsarea unui buton, selectarea unui obiect dintr-un dropdownlist si altele. Formularul din pagin este trimis napoi la server, ctre pagina de tip.aspx. Motorul ASP.NET primete din nou cererea i recreeaz pagina (pagina anterioar a fost dealocat) de pe server; aceast refacere va restabili valorile controalelor la starea anterioar, prin mecansimul de viewstate.

ASP.NET determin care a fost aciunea care a determinat trimiterea napoi i execut event handlerele .Un asemenea event handler execut o operaie de modificare a coninutului formei web, eventual apelnd la cod pentru extragere de date de pe un server de baze de date. Pagina .aspx cu coinutul astfel modificat este transformat n cod HTML i trimis serverului. Obiectele folosite pentru crearea acestui rspuns sunt disponibilizate. Ciclul se reia de la pasul 2. Postback-ul este disponbil doar pentru controale web,iar pentru a determina pe parte de code behind dac cererea e postback sau nu, se poate folosi proprietatea de tip boolean Page.IsPostBack; aceasta are valoarea true dac este un postback, false altfel. Mecanismul este util pentru c de regul la postback se face umplerea controalelor cu valori dintr-o surs de date.
Meninerea strii prin Viewstate

Viewstate este mecansimul prin care se pastreaz ultima valoare a unui control. Pentru fiecare web control se poate seta valoarea EnableViewState la true (de fapt, valoarea implicit), prin asta semnalnduse ca se va menine starea. Meninerea se face prin intermediul unui cmp ascuns numit __VIEWSTATE n cod HTML i accesat cu variabila ViewState pe parte de code behind. Stocheaz datele n interiorul paginii curente, sub forma unui cmp ascuns. La orice trimitere de formular ctre server, acest cmp este proiectat napoi. Este de regula folosit pentru a stoca ultima valoare a unui control (si se include aici i setare privind stilul controlului, nu doar coninutul); poate fi de asemenea mbogit cu perechi de forma cheievaloare, care ulterior pot fi modificate sau terse. n absena mecanismului de Viewstate, la fiecare postback s-ar reface pagina la starea iniiala, pierzndu-se valorile depuse anterior n controale. De exemplu, dac la procesarea anterioar sa setat coninutul unei etichete la o anumit valoare, la a treia cerere aceasta valoare sar pierde. Acest lucru se explic, deoarece HTTP este protocol fr stare, iar serverul nu menine de la o cerere la alta valorile actuale ale controalelor. De regul, asemenea efect este nedorit. Eliberarea resurselor necesitate de ctre server pentru procesarea paginii pot fi eliberate fr problem, ns apare cazul unui cmp ascuns care va fi plimbat permanent ntre client i server, ceea ce duce la ngreunarea comunicrii (pagin mai mare duce la o trimitere trimitere mai lent). De regul, pentru o pagin Web se folosesc o mulime de controale, care implicit au partea de viewstate neinhibat, deci se poate ajunge la dimensiuni mari pentru cmpul ascuns. Pentru contracararea acestui effect, sunt controale a cror stare nu se schimb n timp (e.g. butoane), sau a cror stare este refcut de fiecare dat, pentru care dezactivarea opiunii de

viewstate poate nsemna o economie important de spaiu. De asemenea, evitarea stabilirii valorii pentru controale prin cod (i precizarea lor la designul paginii aspx) reduce viewstate-ul. Exist chiar situaii cnd pagina cu o dimensiune prea mare a cmpurilor ascunse sunt blocate de ctre proxy-uri. Pentru aceasta, viewstateul poate fi spart n mai multe buci. Viewstate se poate folosi nu doar de ctre controalele din pagin, ci i de ctre programator, perminduse adugarea i regsirea unor perechi de forma (cheie, valoare).
Ciclul de via al unei pagini

Paii parcuri de la primirea unei cereri pentru o form web pn la furnizarea rspunsului ctre client sunt: 1. iniializarea paginii - La acest pas se creaz pagina ASP.NET (se instaniaza att clasa corespunztoare poriunii de codebehind, ct i cea corespunztoare paginii aspx); controalele sunt instaniate. Dac pagina nu este prima data cerut de ctre acest browser (adic dac este un postback), atunci se face restaurarea strii din viewstate. Aici se apeleaz de ctre framework metoda Page.Init. 2. instanierea codului utilizator - este apelat metoda Page.Load (de regul ea este scris Page_Load n code behind). Aici de regul se scrie cod care face ncrcarea datelor n pagin. 3. validarea - uneori se cere ca valorile furnizate de ctre utilizator n browser s satisfac anumite cerine. Procesul de validare (care se poate efectua i de ctre codul JavaScript de pe client) trebuie s fie ndeplinit pentru a se asigura c valorile cu care urmeaz s se lucreze au relevan. n caz contrar, pagina se poate retrimite pentru completarea adecvat a intrrilor. 4. procesarea de evenimente - sunt executate metodele care funcioneaz pe post de event handler. Sunt dou feluri de procesri: rspuns imediat, dac este vorba de apsare de buton sau postback automat; rspuns de tip schimbare: dac sa stabilit un event handler pentru un anumit control, dar nu s-a precizat AutoPostback=true, i n plus se detecteaz (prin comparative cu valorile din viewstate) c a aparut o schimbare n starea controlului, atunci se exect acest event handler. Procesarea evenimentelor de tip schimbare se face nainte de procesarea evenimentelor de tip rspuns imediat. 5. legarea automat la date - este vorba de controale care se leag la surse de date. Acestea si pot remprospta automat coninutul, dup eventualele modificri / adugri / tergeri de date.

6. disponibilizarea de resurse - se genereaz pagina HTML care va fi trimis ctre browser. Obiectele instaniate pentru aceast cerere devin neutilizabile.

Forme Web i colecia de controale din pagin

O pagin reprezint un container pentru controalele dispuse pe ea; un control poate de asemenea s fie de tip container (e.g. Panel, MultiView). Regsirea unui control copil coninut se face fie prin iterarea peste colecia Controls, fie prin folosirea metodei FindControl(string id). Proprietatea i metoda amintit sunt motenite din clasa System.Web.UI.Control, baz a tot ceea ce nseamn controale server.
Request

Proprietatea Request reprezint obiect de tipul System.Web.HttpRequest asociat cererii HTTP efectuate de browser. Exist urmtoarele metode i proprieti:

Browser permite accesarea descrierii proprietilor browserului folosit de client (tipul, numele, versiunea, platforma, capabiliti etc); Cookies permite accesarea cookie-urilor trimise de site ctre browser; Form permite accesarea formularului i a coninutului su; QueryString pentru accesarea parametrilor interogrii fcute prin get; URL, URLReferrer adresa curent, respectiv adresa paginii din care s-a facut cererea curent; UserHostName, UserHostAddress adresa i numele calculatorului de pe care sa facut interogarea; UserLanguages lista de limbi pe care o are setat browserul clientului; util pentru internaionalizare.

Response

Dei rar folosit, acest obiect, instana a clasei System.Web.HttpResponse d acces la cteva mecanisme, printre care: setarea de cookie-uri ce sunt trimise spre client via proprietatea Cookies; saltul la o pagin nou via metoda Redirect; n felul acesta, de pe server se trimite un mesaj browserului prin care este instruit s cear pagina indicat de server; se poate face redirectare la orice fel de pagin (chiar i la un de tip htm), aflat oriunde;

Server

determinarea strii de conectare a clientului prin interogarea proprietii boolene IsClientConnected; dac rspunsul este false, atunci se poate renuna la o procesare consumatoare de resurse pe partea de server; trimiterea de coninut, altceva dect ir de caractere via proprietatea ContentType; tipurile posibile de coninut sunt prevzute de ctre specificaiile MIME type21. lucrul direct cu fluxul de ieire ctre client, prin proprietatea OutputStream.

Obiectul Server este de tip System.Web.HttpServerUtilit, acesta dnd acces la metode auxiliare pentru procesarea de cereri web. Foarte utile sunt metodele HtmlEncode i duala ei HtmlDecode. Dac codul ASP.NET posteaz coninut de tip ir de caractere n pagin, este obligatoriu a se face codificarea lor conform canoanelor HTML, altfel caractere precum < sau > pot produce ravagii n pagin, ele vor fi codificate ca fiind &lt; respectiv &gt;. Similar pentru substituirea corect a caracterelor n adrese, se folosesc metodele UrlEncode i UrlDecode, iar pentru determinarea cii fizice corespunztoare unui fiier de pe site se folosete metoda MapPath(). Pentru transferarea la o alt pagin, fr a se face redirectare prin browser (ca la Response.Redirect), se poate folosi Server.Transfer(), cu restricia ca transferul s se fac doar ctre pagina ASP.NET de pe acelai server.
Tipuri de controale server

Exist dou tipuri majore de controale, server HTML i cele server Web. Acestea din urma cunosc specializarile: controale bogate, de validare, de date, de navigare, de login, pari Web, pentru ASP.NET AJAX i de tip ASP.NET mobil.Toate controalele de tip server au ca principal trstur faptul c se pot procesa ca obiecte pe server, avnd deci un tip de date reprezentat pe platforma .NET. Clasa de baz pentru orice control este clasa System.Web.UI.Control, care e derivat de clasa System.Web.UI.WebControls.WebControl, reprezentnd baza pentru controalele de tip server. Clasa Control conine i transmite derivailor proprietile i metodele: ClientID proprietate ce returneaz identificatorul fiecrui control din pagina HTML, putnd fi utilizat n JavaScript, prin funcia document.getElementById(); Controls proprietate care returneaz o colecie de controale copil ale obiectului curent;

21

Este un standard care permite extinderea formatului unui string, cum ar fi: caractere n alt format dect ASCII, ataamente etc.

EnableViewState returneaz sau seteaz o valoare logic specific dac ultima stare setat pentru un control va fi sau nu salvat n ViewState proprietate a paginii, care va fi transformat n campul ascuns __VIEWSTATE; ID este identificatorul controlului, adic numele de variabil cu care se poate accesa n code-behind controlul respectiv; Page obiectul pagin care conine controlul curent; Parent controlul n care este copil controlul curent; Visible proprietate cu valoare logic, specificnd dac controlul este vizibil sau nu; DataBind() se face popularea controlului la surse de date; FindControl() se caut recursiv un control cu un anumit nume n controlul curent; HasControl() returneaz true sau false, artnd dac controlul curent are sau nu controale copil; Render() se scrie codul HTML asociat controlului curent; metoda se apeleaz de regul de ctre motorul de ASP.NET i nu direct de programator.

Controale server HTML

Sunt din trei categorii mari: controale de tip input (e.g. butoane, checkbox, casue de text etc), controale de tip container (formular, tabel, textarea etc) i grupul format din HtmlImage, HtmlLink, HtmlTitle. Clasa de baz este HtmlControl, iar proprietile expuse sunt: Attributes proprietate care permite accesarea sau adugarea de atribute; Disabled returneaz sau seteaz starea de inhibare a controlului; dac are valoarea true, va fi afiat pe pagin, dar cu culoare gri deschis; Style permite accesarea sau modificarea stilurilor CSS pentru controlul curent; TagName returneaz numele controlului.

Un control de tip HtmlContainerControl reprezint un control HTML care are att etichet de deschidere, ct i de nchidere, cum ar fi a sau img.Pe lnga cele motenite din HtmlControl, mai avem proprietile: InnerHtml returneaz sau seteaz textul HTML dintre etichetele de deschidere i nchidere. Toate caracterele sunt lsate aa cum se dau; facilitatea este folosit de regul pentru includerea de coninut HTML; InnerText ca mai sus, cu deosebirea c textul setat sufer modificarea caracterelor care au semnificaie HTML predefinit (<, >, ghilimele etc) sunt

nlocuite cu codificri corespunztoare (&lt;, &gt;, &quot; etc). Clasa HtmlInputControl este folosit ca baz pentru controalele care permit interaciunea cu utilizatorul, cum ar fi <input type="text">, <input type="submit">. Fa de cele motenite din HtmlInputControl, se mai pun la dispoziie proprietile: o Type obine tipul unui obiect HtmlInputControl; o Value obine sau seteaz coninutul pentru controlul curent.

Controalele server HTML pot manipula dou evenimente pe parte de server: ServerClick este un click procesat de partea de code-behind; ServerChange se declaneaz atunci cnd se modific coninutul unui control, putnd avea stri diferite: text, checkbox i altele.

Controale Web server

Reprezint clase din spaiul de nume System.Web.UI.WebControls, gndite pentru a extinde gama de controale HTML. Un control de tip Web server nu are doar o reprezentare grafic mai bogat, datorit unui cod bogat de HTML care se genereaz automat, ci i un comportament mai orientat ctre comunicarea cu serverul. Clasa de baz este WebControl, care expune mult mai multe proprieti i metode dect analoagele lor de tip HTML server control. Spre exemplu, se pune la dispoziie proprietatea Font prin care se specific proprietile fontului curent: corp de liter, culoare, decorare, mrime etc. Se elimin astfel necesitatea de a ti foarte bine numele atributelor CSS i valorile lor deoarece clasele folosite sunt fcute astfel nct s furnizeze doar valorile acceptabile. Toate controalele se declar n pagina aspx cu sintaxa <asp:numeControl>, avnd automat proprietatea runat cu valoarea setat pe server , mai mult, dac atributul lipsete, se declar eroare de compilare. Spre deosebire de controalele HTML server, fiecare control server Web dispune de metoda Focus() care poate fi utilizat pe parte de code-behind pentru a selecta acel control ca fiind cel curent. n cazul n care pe un formular sunt dispuse mai multe butoane, este posibil specificarea unui buton ca fiind implicit. Specificarea lui se face prin intermediul formularului, care prin atributul DefaultButton poate specifica ID-ul butonului care va fi considerat ca implicit. Dac se folosesc panouri (<asp:Panel>), se poate specifica la nivel de panou care este butonul implicit.

Gestiunea starii n ASP.NET

Se tie c HTTP este un protocol care nu pstreaza starea,iar motorul de ASP.NET distruge obiectele pe care le-a format pentru a rspunde cererii clientului, ns sunt cazuri n care este nevoie ca ntre dou cereri succesive o anumit informaie s fie pstrat i recuperat dac este nevoie de ea. Managementul strii n ASP.NET se poate face cu: 1. 2. 3. 4. 5. 6. 7. ViewState Query String Cookie-uri Session Application Profilul Caching

View State Tipuri de date premise Durata de via Tot ce e serializabil Permanent reinut la postback-uri

Query String Un numr limitat de caractere Se pierde cnd se introduce o nou adres

Cookie-uri utilizator iruri de caractere Setat de programator

Sesiune Orice tip serializabil Expir dupa un t de la ultima accesare a serverului Memoria serverului sau baza de date

Application Orice tip .NET Durata de via a aplicaiei

Stocare

Un cmp ascuns n pagin

Adresa URL din browser

Memoria (RAM/HDD) a calculatorului clientului ntreaga aplicaie ASP.NET Nesigur, poate fi modificat de utilizator Bun deoarece datele sunt puine

Memoria serverului

Vizibilitate

Pagina curenta Uor de citit, relativ greu de modificat, poate fi criptat Nu afecteaz serverul dar poate ngreuna comunicaia

Pagina int Vizibil n clar, uor de modificat Bun, deoarece datele sunt puine

n toat aplicaia n cadrul unei sesiuni Sigur, deoarece datele nu sunt trimise la client Sesiuni mari -> server lent Stocare de cumprturi

n toat aplicaia, global Foarte sigure, doarece datele nu sunt trimise la client Multe date-> server lent Variabile globale

Securitate

Perfoman

Query String

Reprezentarea se face sub forma variabil=valoare, iar mai multe astfel de perechi pot fi separate prin caracterul &.Exist urmtoarele limitri ale unui query string:

Informaia este limitat la iruri de caractere, care trebuie s conin caractere valide pentru un URL; Informaia este vizibil pentru oricine; Pot aprea modificri neanuate ale componentelor din QS; de exemplu, n loc de lang se poate decide s se foloseasca doar l. lungimea maxim a acestui URL este limitat.

Este foarte important ca adresa astfel format s conin mereu caractere valide pentru un URL. Acest lucru se obine prin apelul metodei Server.UrlEncode.
Cookies

Cookie-urile utilizator reprezint fiiere care sunt meninute de ctre client (browser) fie n memoria sa (i deci disponibile doar pe durata cat browserul este deschis), fie pe harddisk (i deci pot fi valabile la repornirea browserului). Reprezint perechi de forma cheievaloare, ambele de tip string. Un cookie este trimis automat de ctre browser serverului i apoi napoi.
Sesiunea

Sesiunea nu este parte a HTTP-ului,ns este un concept implementat de ctre orice framework pentru crearea de pagini web dinamice. O sesiune este o caracteristic a unui browser, reprezintnd un container de elemente structurate ca i cheievaloare, unde cheia este de tip string iar valoarea orice obiect serializabil. De obicei, se menine n memoria serverului cte o sesiune, instaniat la fiecare nceput de sesiune. Alternativ, se poate specifica faptul ca sesiunile s fie memorate ntro baz de date. Fiecare sesiune este identificat de un ir de 120 de bii lungime, care se salveaz de regul ntrun cookie pe browser; la orice cerere efectuat de ctre browser, se trimite automat i acest cookie, ceea ce permite serverului s determine care este sesiunea ataat browserului; pe partea de code behind se poate accesa coninutul sesiunii. Dac se suspecteaz c clientul nu are mecansimul de cookie permis (sau browserul nu permite aa ceva), atunci se poate face codificarea acestui identificator de sesiune prin intermediul URLului, setare disponibil din fiierul de configurare web.config; sau se poate folosi autodetectare, deci s se decid automat care din variante s se aplice. Sesiunea este pierdut ntruna din urmtoarele situaii: utilizatorul nchide browserul; aceasta duce la pierderea cookie-ului care conine indentificatorul de sesiune; sesiunea expir; implicit, n ASP.NET dupa 20 de minute de la ultima accesare dinspre clientul care a determinat crearea sesiunii, se dealoc automat aceast

sesiune de ctre server, pentru a nu irosi resursele; valoarea de timeout se poate specifica n fiierul de configurare web.config; dac programatorul apeleaz n code behind Session.Abandon().

Dac cineva urmarete comunicaia pe reea, poate s obina acest cookie, i deci acces la sesiune. Pentru aceasta se poate folosi SSL22.
Application

Obiectul Application este unic pentru toat lumea, deci poate s conina niste valori care sunt de interes general: contoare, de exemplu numrul de utilizatori curent logai sau seturi de date care nu se modific, dicionare de traducere.
Validatoare

n cazul formularelor, o parte considerabil o reprezint controalele de preluare a datelor de la utilizator. Pentru aceste date preluate un minim de reguli se cere, de obicei, s fie respectat. De exemplu, pentru un nume de utilizator, se cere ca acesta s fie nevid; pentru o adres de email sau un numr de telefon, acesta trebuie s aibe un anumit format. Validarea se poate face n dou locuri: pe server (la postback) sau pe client, nainte de trimiterea formularului care le conine. A doua variant este, evident, preferat, deoarece se scutete un drum pn la server, pentru ca acolo s se constate c datele sunt invalide. Am prefera deci ca n codul HTML care se trimite clientului s existe invocare de cod JavaScript care s verifice, pe ct posibil, dac regulile de validare a datelor de intrare sunt satisfcute. Pentru a evita scrierea acestui cod de validare manual, sau introdus urmtoarele controale de validare: <asp:RequiredFieldValidator> - verific dac un cmp de intrare are coninut; <asp:RangeValidator> - determin dac valoarea specificat ntrun control de intrare are valoarea cuprins ntre dou margini precizate; <asp:CompareValidator> - verific dac valoarea unui control este ntr-o relaie anume cu alt valoare; <asp:RegularExpressionValidator> - verific dac valoarea unui control satisface o anumit expresie regulat; <asp:CustomValidator> - pentru cazurile n care logica de validare nu se regsete printre controalele enumerate anterior;

22

Secure Socket Layer este un protocol web folosit pentru a transmite fr risc documente private prin Internet

<asp:ValidationSummary> - arat un sumar al erorilor de validare pentru controalele crora li s-a asociat validator.

Pentru un control se poate specifica mai mult de un validator; de exemplu, pentru un textbox se poate asocia un validator de tip RequiredFieldValidator care verific dac coninutul csuei de text este nevid; suplimentar, se poate asocia un validator de expresie regulat, pentru a vedea dac coninutul satisface un anumit format. Este chiar cerut a se asocia validatorul de cmp cerut, deoarece pentru un RegularExpressionValidator (ca de altfel i pentru RangeValidator i CompareValidator), testul de validare se consider trecut dac intrarea este lsat goal. Controalele de preluare a datelor care sunt validate sunt: TextBox, ListBox, DropDownList, RadioButtonList, HtmlInputText, HtmlTextArea, HtmlSelect. cnd se valideaza un control de tip list (care conine particular List n denumire), se valideaz proprietatea Value pentru obiectul ListItem curent selectat.
Paii de validare

Validarea se pornete atunci cnd utilizatorul apas un buton (sau link sau ImageButton) care determin trimiterea formularului ctre server. Fiecare component pomenit are o proprietate numit CausesValidation de tip boolean care dac are valoarea true atunci se va face validarea paginii. Validarea se face iternd peste controale i verificnd dac sunt ndeplinite condiiile specificate. Pentru validatoarele care nu sunt respectate, se retrimite pagina, cu indicarea cazurilor care nu au fost respectate. Scenariul descris corespunde situaiei n care n browserul folosit pentru afiare nu se permite executare de cod JavaScript; dac se permite i validatoarele nu sunt respectate, atunci pagina nici mcar nu mai ajunge s fie trimis ctre server, ci se va afia direct mesajul de eroare pentru fiecare validator nevalidat n parte.
Clasa BaseValidator

Toate validatoarele sunt derivate din clasa BaseValidator. Proprietile eseniale propagate n derivai sunt: ControlToValidate id-ul controlului pentru care se aplic validarea; este necesar a fi specificat; Display cum anume se afieaza mesajul de eroare; dac este specificat valoarea Static, atunci spaiul necesar afirii este prealocat; dac este specificat valoarea Dynamic, atunci la afiarea acestui coninut se va produce deplasarea elementelor ce-i urmeaza pentru a face loc coninutului;

EnableClientScript pentru valoarea true, se va permite apelarea de cod JavaScript pe client, pentru a verifica validitatea; Enabled specific dac este o validare activat sau nu; ErrorMessage mesajul de eroare care va fi afiat ntrun control ValidationSumary, dac exist aa ceva; Text textul de eroare care se va afia dac validatorul nu este respectat; ValidationGroup se refer la posibilitatea de grupare de validatori n mai multe grupuri.

Validatorul RequiredFieldValidator

Verific dac un control are sau nu coninut introdus. Implicit, se va verifica dac textul este vid (sau conine doar spaii); dac se dorete ca aceast comparaie s se fac cu un ir de caractere specificat de utilizator, atunci valoarea aceasta se poate da n propietatea InitialValue. Dac coninutul textbox-ului coincide cu aceast valoare iniial (dupa aplicarea unei operaii de Trim pe coninutul controlului), atunci se raporteaz eroare de validare.
Validatorul RangeValidator

Se folosete pentru a verifica dac o valoare specificat este ntr-un interval specificat prin intermediul proprietilor MinimumValue i MaximumValue;tipul de date pentru care se face comparaie este specificat n proprietatea Type. Se pot specifica tipurile: Currency Date Double nteger String

Validatorul CompareValidator

Se folosete pentru a verifica dac valoarea specificat ntr-un control este ntr-o relaie (mai mare, mai mic etc) cu o valoare specificat, sau chiar cu valoarea unui alt control. Prin proprietatea Operator se specific relaia pe care trebuie s o aibe controlul la care este ataat validarea. Opiunile sunt: Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual i DataTypeCheck. Ultima valoare este util pentru c verific dac valoarea din control se poate reprezenta n tipul de date specificat via Type.

O alt situaie des ntlnit este cnd trebuie specificat ntrun textbox o valoare care s coincid cu cea scris n alt textbox, de exemplu la validarea unei parole alese.Pentru aceasta, se va specifica proprietatea ControlToCompare cu referin la cellalt textbox de comparaie.
Validatorul RegularExpressionValidator

Este utilizat n cazul n care se dorete specificarea unei expresii regulate fa de care se face validarea. Exemplul cel mai des invocat este cel al unei adrese de email, cu reprezentarea ".*@.{2,}\..{2,}".
Controlul CustomValidator

Exist situaii n care validarea nu poate fi facut cu ce sa prezentat mai sus; fie se invoc resurse de pe server (verificarea unor date din baza de date, sau logica specific domeniului), fie este vorba de un ir de pai care definesc validarea. Pentru aceast situaie se folosete CustomValidator. Codul se poate executa pe parte doar de server sau de server + client. Numele funciei JavaScript care se apeleaz pentru validarea n browser se specific ca valoarea a proprietii ClientValidationFunction, iar metoda din code-behind se refer cu atributul asp.net onservervalidate. Pentru ambele funcii, ca prim argument se specific validatorul care a declanat evenimentul de verificare, iar al doilea parametru este un argument care d acces la valoarea controlului pentru care se face validarea, mpreun cu posibilitatea de a seta validitatea strii.
Controlul ValidationSummary

Acest control nu este prevzut pentru validare, ci pentru a strnge un sumar al erorilor din pagin. De la fiecare validator care semnaleaz eroare se preia coninutul proprietii ErrorMessage i se arat fie n pagin, fie ntr-o fereastra JavaScript, dac proprietatea ShowMessageBox are valoarea true. Modul de afiare a erorrilor este specificat de proprietatea DisplayMode, cu valorile: SingleParagraph, List, BulletList.
Grupuri de validare

Pentru paginile mai stufoase, se poate imagina o grupare a controalelor (de exemplu, prin obiecte de tip Panel). Proprietatea ValidationGroup se poate specifica la nivel de control de validare, sub forma unui ir de caractere; de asemenea, fiecare buton care produce postback poate s specifice o valoare pentru aceeai proprietate; la apasarea lui, se face verificarea

validatoarelor doar pentru cele care au acelai grup ca i butonul acionat. Pentru toate celelate validatoare care nu fac parte din grup, se omite partea de verificare a corectitudinii.
Cascading Style Sheets

Cascading Style Sheets (CSS) reprezint modalitatea de separare a aspectului vizual de partea de coninut; mai mult dect att, permite centralizarea acestor reguli de stil i reutilizarea lor. Regulile CSS se refer la modul n care vor fi decorate vizual elementele HTML de ctre browser. Regulile sunt aplicate de ctre browser asupra codului HTML primit de la server. Stilurile se aplic cu predilecie elementelor HTML, dar se pot specifica i controalelor Web server, folosind atributul CssClass.
Teme

Stilurile CSS se pot aplica uor elementelor de tip HTML sau controalelor, dar ele vin cu un coninut fix, specific HTML-ului: dimensiunea fontului, culoarea fundalului etc. Se pune ntrebarea: cum anume se poate aplica ideea de stil i pentru proprietile unui control ASP.NET? avnd n vedere ca un asemenea control poate veni cu proprieti al cror nume nu se regsete n ceea ce pune la dispoziie CSSul, avem nevoie de o modalitate de a complete facilitile acestuia din urma. Spre exemplu ne propunem s setm stilul unui control de tip Calendar; avnd n vedere ca acest control este particularizat prin proprieti specifice claselor ASP.NET, vrem s completm facilitile CSSului. Diferenele ntre stilurile CSS i temele ASP.NET sunt: 1. Temele sunt asociate controalelor, nu CSS-ului; dar temele preiau ideea de baz a CSSului, definirea de stil i reutilizarea lui pentru obinerea unui layout unitar. 2. Temele sunt aplicate de ctre server; fiierul CSS menionat pentru o pagin HTML este descrct de ctre browser i interpretat tot de ctre el. 3. Temele pot fi aplicate prin intermediul fiierelor de configurare; aceasta permite aplicarea unei teme paginilor dintr-un ntreg folder fr a fi nevoie s se modifice paginile aspx. 4. Temele nu se aplic n aceeasi ordine ca i stilurile CSS; dac se specific o proprietate ntro tema i ntr-un control, atunci setarea din tema este cea care se aplic. Toate temele se definesc n cte un director din directorul numit App_Themes aflat direct n rdcina aplicaiei web. La un moment dat, pentru o anumit pagin cel mult o tem este activ. Pentru a defini o tem, este nevoie s se defineasc cel puin un fiier text cu extensia skin. Un fiier skin conine declaraii de controale ASP.NET, pentru care se pot specifica proprietile dorite.

Spre deosebire de declaraiile asemntoare din paginile aspx, atributul id nu se poate specifica; atributul runat trebuie s fie prezent, iar n rest orice alt atribut poate s lipseasc. Se pot crea mai multe fiiere skin, de exemplu fiecare coninnd declaraii pentru controale nrudite. Exist posibilitatea de a defini fiiere de skin i la nivel global, dar acest lucru este nerecomandat, din cauza c ngreuneaz instalarea aplicaiei pe alte servere. Pentru a aplica o tem anume unei pagini, se poate proceda n mai multe feluri: se poate folosi atributul Theme n cadrul directivei Page, avnd valoarea numele directorului de tema dorit sau se poate specifica proprietatea Theme in code-behind. Menionm c tema se poate seta n code behind doar n evenimentul de Page_PreInit, eveniment care se declaneaz nainte de Page_Load. n ambele cazuri, efectul este acelai. Dac se dorete ca un anumit control s nu fie mbracat conform setrilor de tem, se poate specifica n cadrul paginii aspx atributul EnableTheming cu valoarea false. n cadrul unui director de tip tem, se poate de asemenea crea un fiier de tip CSS. Dac o pagin folosete tema curent, atunci se va aplica automat i stilul CSS din directorul temei. Acest lucru este util dac: se dorete aplicarea de CSS pentru elemente HTML care nu corespund controalelor server; se consider c CSS-urile, fiind standardizate, ar trebui folosite mai mult; aceste fiiere CSS deja exist i se dorete utilizarea lor, fr a fi nevoie ca s fie rescrise sub forma de teme.

Exist o oarecare problem: pentru a putea schimba tema la momentul rulrii, deci pentru a aplica CSS-ul din directorul noii teme, este nevoie ca s se poat modifica elementul link din interiorul poriunii de head. Modificarea se face automat dac elementul head are precizat atributul runat cu valoarea server.
Pagini master

O pagin master este un fiier cu extensia master. Folosete un model de declarare similar cu cel al paginilor aspx, adic pagina pe care se pot depune controale i parte de code-behind. Adugarea unei pagini master se face asemntor cu adugarea unei pagini obinuite de tip aspx. Pentru crearea unei structuri unitare a unui site, se pot folosi variantele: controale utilizator; pot fi utilizate pentru a implementa principiul dont repeat yourself, dar nimeni nu poate s garanteze c acest coninut, chiar dac e identic, este i dispus identic; frameuri HTML; nu mai sunt suportate de standardul XHTML;

pagini master varianta standard n ASP.NET.

O pagin master permite crearea unui ablon care va fi aplicat peste nite pagini de tip coninut. Utilizarea unei pagini master pentru tot site-ul determin o apariie consistent a acestor pagini. Folosind pagini master, sa rspuns urmatoarelor probleme: se definete o singur dat o poriune de pagin care poate fi reutilizat ori de cte ori se dorete; se definesc regiunile editabile, adic acele zone n care o pagin ce folosete ablonul, are voie s adauge coninut; suport din partea unei unelte precum Visual Studio; se permite particularizarea unor aspecte din pagina master, din pagini de coninut.

Legarea la date

Legarea la date reprezint capacitatea unui control ASP.NET de a-i prelua coninutul din diverse surse: baze de date clasice, proprieti, metode, servicii web etc. Dup ce coninutul este preluat, e afiat conform specificului controlului. Un rol la fel de important l au sursele de date, controale prin intermediul crora se determin care este proveniena datelor; ele acioneaz ca o punte de legtura ntre datele afiate i controalele ASP.NET; suplimentar, mai permit i specificarea modului de manipulare a lor: datele se terg, se adaug, se modific. Este remarcabil flexibilitatea de utilizare a lor, permind specificarea legturii ntre controale i date fie exclusiv declarativ (fr sau cu foarte puin cod pe parte de codebehind), fie prin cod, dac se dorete personalizare. Modul n care funcioneaz acest mecanism este declarativ, folosind cod scris n pagina aspx, acolo unde se precizeaz care e controlul de afiare. Se separ partea de codebehind de cea de specificare a sursei de date. Exist dou feluri de legri de date: pentru date simple (unice) i pentru date multiple.n primul caz este vorba de controale de tip etichet, buton, LinkButton, Image pentru care se poate specifica o singur valoare care va fi folosit.
Elemente de baz JavaScript

JavaScript permite scrierea de cod client, executat de ctre browser. JavaScript este vzut actualmente ca un dialect al ECMAScript; este un limbaj slab tipizat (variabilele nu si declar tipurile de date dect arareori), dinamic (permit modificarea codului i a tipurilor de date, n

timpul execuiei), interpretat. Codul JavaScript este inclus direct n documentul HTML sau referit de ctre acesta; el e descrcat de ctre browser i rulat. Pentru a include cod JavaScript n pagina HTML, se poate proceda astfel: se definete tratarea unui eveniment pentru un control HTML direct sub forma codului care va fi executat; se adaug un element <script> care conine cod JavaScript. Elementul conine cod care se execut atunci cnd browserul ajunge s l ncarce sau codul unei funcii care poate fi apelat direct sau indirect ca parte a procesrii unui eveniment.

Acionarea de ctre codul JavaScript asupra componentelor din pagin se face prin HTML DOM (Document Object Model), adic DHTML. Evenimentele care pot declana apelul unui cod JavaScript sunt: onchange - apare atunci cnd se schimb starea unui control; onclick - apare atunci cnd se apas click de mouse pe un control; onmouseover - cnd mouse-ul se mic deasupra unui control; onmouseout - cnd mouse-ul se mica n afara controlului; onkeydown, onkeyup - cnd utilizatorul apas/elibereaz o tast; onfocus - atunci cnd un control primete focusul onload - apare atunci cnd o pagin se termin de ncrcat; onunload - apare atunci cnd o pagin este pe cale de a fi descrcat din browser (chiar dupa ce s-a dat click pe un link sau s-a introdus o nou adres pentru browser).

ASP.NET membership

ASP.NET pune la dispoziie un API pentru gestiunea utilizatorilor care pot s acceseze o aplicaie. Se ofer suport pentru urmtoarele operaii, care n mod normal ar trebui implementate de fiecare dat n cadrul unei aplicaii web: crearea i tergerea de utilizatori programatic sau prin interfaa pus la dispoziie automat; abilitatea de a reseta parole, cu posibilitatea de a trimite noua parol prin email, dac a fost specificat o adres; posibilitatea de a se crea parole n mod automat, dac se folosete crearea programatic a utilizatorilor; determinarea listei de utilizatori, mpreun cu detaliile asociate; controale predefinite pentru logare, creare de utilizator, resetare de parol.

Paii ce trebuie urmai pentru utilizarea unui API-ului de membership sunt: configurarea modului de autentificare n fiierul web.config; setarea detaliilor relativ la stocarea datelor utilizatorilor; configurarea stringului de conexiune i a furnizorului de membership; crearea de utilizatori ai aplicaiei web; crearea unei pagini de login.

Crearea unei pagini de login

Pagina de login se poate face cu controale puse la dispoziie de ctre ASP.NET sau prin pagini create de programator. Controalele ASP.NET sunt: Login - control compus care rezolv cele mai multe probleme legate de autentificare afiarea unor casue de text n care se pot scrie numele de utilizator i parol; LoginStatus - exprim starea de autentificare a unui utilizator; dac nu e autentificat, utilizatorul va vedea un buton a crui apsare va duce la redirectarea ctre pagina de login; altfel va afia un buton de logout; LoginView - permite afiarea condiional a diferitelor controale; dac utilizatorul este autentificat, atunci va vedea un anumit coninut, altfel un altul; PasswordRecovery - permite recuperarea parolei de ctre utilizator; ChangePassword - cere parola veche i permite specificarea unei noi parole; CreateUserWizard - include un wizard complex care permite crearea de conturi utilizator.

Avantajul acestor controale este minimul de cod care trebuie scris pentru a putea face uz de partea de membership.

NHibernate
NHibernate este o soluie(framework) open-source23 bazat pe tehnici ORM24 i un tool ce creaza o reprezentare virtual a obiectelor din baza de date n cod.

23 24

Produse finite ce permit utilizatorilor s acioneze liber asupra precesului de producie sau dezvoltare Object Relational Mapping un soft sau o tehnica de programare pentru convertirea datelor in limbaje de programare orientate pe obiecte

Pe scurt NHibernate face toat treaba bazei de date, i utilizatorii culeg roadele. n loc s scrii sintaxe SQL sau s creezi proceduri stocate care sunt n alt loc dect codul respectiv, poi avea toate datele de acces coninute logic n aplicaie. Nu doar c interogrile vor fi eficiente, ele vor fi de asemenea validate de compilator, astfel dac structura tabelelor se schimb, compilatorul te va anuna c este nevoie de o schimbare a interogrilor.

Avantajele folosirii NHibernate


Daca nu ii place s foloseti metode de scriere CRUD 25 de fiecare dat pentru fiecare parte de date de care ai nevoie, probabil eti n cutarea unei metode mai avantajoase. n acest caz eti capabil s expui un design elegant al unei baze de date. Nu ar fi super s poi creea cateva tabele i n cteva minute, s ai un set de forme funcionale pe care s le poi folosi pentru operaiile de baza CRUD. Un proiect de baz NHibernate este compus din 3 pari majore. Este nevoie de un fiier de mapare care s spun NHibernate cum este sau cum ar trebui s fie baza de date construit, cteva metode de acces de date care s spun NHibernate ce date s returneze sau s stocheze n baza de date, i un POCO 26 care s permit interaciunea cu datele. Cum fiierele de mapare XML sunt cele mai folosite n proiectele NHibernate , nu sunt singurele metode de a lega date POCO . Prin intermediul NHibernate, acestea consist n configurri pentru framework-ul ORM nsui (conectarea la sursa de date, identificarea limbajului pentru date etc.) i maparea domeniului de obiecte n tabele. Primul lucru pe care trebuie s il facem la NHibernate este de a creea un tabel n baza de date ctre care s ne relaionm tabelele. Un exemplu este un tabel de logare (Login) cu o cheie primar Id, dou cmpuri nulabile prenume , nume i dou cmpuri nenulabile utilizator i parol.

Fiierul de mapare XML hbm.xml


Folosind un ObjectDataSource putem mapa obiectele NHibernate direct la controalele care vor fi afiate sau cu care vor interaciona. Tot ce trebuie fcut este s crem un ObjectDataSource care s ne returneze date din clasa de acces, s crem un set de formuri unde s afim aceste date (ex: asp:GridView) i rmne ca ASP.NET s fac munca grea pentru noi.

25 26

Create, Retrieve, Update, Delete Plain Old CLR Object este folosit pentru a fixa legtura CLR-ului cu .NET Framework

Tot ce trebuie scris n cod este un GridView pentru a prezenta informaiile i un OjectDataSource care s interacioneze cu clasele de date, care s furnizeze datele pentru GridView. GridView are definite cmpuri BoundField pentru toate cmpurile din tabel i de asemenea funcii de sortare i paginare. OjectDataSource are metode mapate pentru Select, Select count, Insert sau Update. Cnd GridView trebuie s execute una din aceste funcii, intervine OjectDataSource, care trebuie s se ocupe de aceste operaii. n tandem aceste dou controale (la fel ca orice alt control pentru legare de date) pot oferi o foarte simpl i rapid interfa pentru date.

Expunerea bazei de date


Unul din cel mai important lucru pe care l poi face ntr-un proiect este s ii expui datele ntr-un model logic i eficient. Mai departe voi prezenta fundamentele unui bun design pentru o baz de date i cum pot fi datele modelate eficient. Voi prezenta un exemplu folosind Microsoft SQL Server Express. Cu NHibernate poi folosi aproape orice baz de date, Microsoft SQL Server Express este disponibil gratis de la Microsoft. Un lucru foarte important care trebuie fcut de la nceput este de a-i expune tabele i ntreaga structur logic. Cteva minute pierdute la nceput realiznd o baza de date logic te poate scuti de ore sau chiar zile de munc ulterior. Vei fi surprins n mod neplcut n momentul n care vei realiza ca ai nceput un proiect pe baza unei baze de date greit. Crearea unui model de tabele este ca o mic art, dar nu trebuie s ii faci griji dac nu eti un Da Vinci. Dac urmezi civa pai de baz pentru designul unor tabele, totul va fi n regul. Unul din cele mai importante lucruri care trebuie fcute cnd faci design-ul tabelelor(modelul relaional) este acela de a le da nume sugestive. Numele tabelelor ar trebui s descrie tipurile de nregistrri care vor fi stocate n acesta. Dac numele nu va fi schimbat, numele pe care l vei da obiectului n baza de date va fi numele folosit n cod. Chiar dac ar nsemna s scrii mai mult pentru numele fiecrui tabel, acest lucru ar face structura tabelelor mai uor de neles i eventual codul mai uor de citit la final. Numele tabelelor trebuie s fie singulare la fel ca i obiectele pe care le reprezint. Fiecare rnd din tabel n baza de date va reprezenta un singur obiect. Fiecare coloan din baza de date se numete cmp. Numele cmpurilor ar trebui s urmeze un tipar asemntor tabelelor, acest lucru uurnd munca utilizatorilor. Primul cmp care este definit este cheia primar. Cheia primar a unui tabel are rolul de identificator. Definnd un camp ca o cheie primar, spunem c aceast valoare este folosit pentru a identifica un rnd unic.

O cheie primar ar trebui s aib cteva atribute de baz: s fie definit de tip int, long sau GUID (nu VARCHAR); s nu fie nulabil; s fie unic; s fie declarat ca cheie primar; s fie asignat de un generator POID (Persistent Object ID) NHibernate.

Una din condiiile pentru o bun cheie primar este aceea s fie asignat de un generator POID NHibernate. Asignarea automat permite NHibernate s genereze valorile pentru fiecare id i s le pun n obiectul nostru. De fiecare dat cnd un obiect este adugat n baza de date , i este asignat un numr, fie urmtorul din secven, sau un GUID27 aleator, n funcie de ce POID 28folosim.

Relaionare
Unul din obiectivele designul-ului pentru baza de date este de a reduce duplicarea datelor i de a grupa logic diferite tipuri de date n diferite tabele.

Dac doreti s ai un tabel cu anumite cmpuri crora s nu le dai valori, avem nevoie de o metod logic de a grupa datele n fiecare tabel i s fie relaionate la buci de date. Acest lucru se cheam relaionare, i este probabil cel mai puternic concept n design-ul bazelor de date. Permind unui tabel s stocheze metadate sau date despre date , putem spune c un tabel A memoreaz date n comun cu un tabel B, dar pot fi zero sau mai multe nregistrari pentru tabelul B n tabelul A. Sunt cteva tipuri de relaionri: unul la mai multe mai multe la unu unu la unu mai multe la mai multe

27 28

Globally unique identifier este un string de 32 de caractere ce este stocat pe 128 bii. Este un unic identificator pentru o nregistrare dintr-un tabel, folosit ca cheie primar

Acestea definesc cum sunt legate datele. Relaia unu la unu este mai puin folosit putnd fi modelat direct n interiorul tabelului.

Normalizarea
Normalizarea este o metod de a construi baze de date pentru a standardiza aspectul lor i de a reduce duplicarea datelor. Din cele 6 form-uri normale, 3NF (Third Normal Form) este cel mai discutat, dar First Normal Form (1NF ) este cel de care toat lumea se ngrijoreaz. Pentru a fi conform 1NF trebuie s fie eliminate coloanele ce se repet n acelai tabel, i s fie create tabele separate pentru fiecare grup din datele relaionate , iar apoi fiecare rnd s fie identificat prin cheia primar. Cu alte cuvinte nu este bine s salvm date duplicate, vrem s o memorm odat i s relaionm la ea. n mod esenial o baz de date 3NF va memora date n tabele multiple pentru a normaliza datele i de a reduce duplicarea, i adiional: dependenele funcionale pe cmpuri ce nu sunt chei, sunt eliminate, fiind puse n alte tabele.; la acest nivel, cmpurile ce nu sunt chei sunt dependente de cheia primar un rnd este n 3NF dac i numai dac este 2NF i dac atributele care nu contribuie la descrierea cheii primare sunt mutate ntr-un tabel separat

Clase
Unul din lucrurile de care vom avea nevoie pentru clase este un constructor. Constructorii sunt folosii pentru a nnoi un obiect. OrderHeader header = new OrderHeader(); n acest exemplu este creat un nou obiect de tipul OrderHeader. Acest obiect reprezint tabelul OrderHeader creat n baza de date. Pentru a creea acest obiect avem nevoie de un constructor(n acest caz constructorul implicit). Constructorul implicit este pur i simplu o metod care nu are obiecte de retunare definite, cu acelai nume ca, clasa noastr (n C#).

Proprieti publice i variabile private


NHibernate trebuie s aibe un loc unde s in datele pe care le stocm n baza de date. Pentru ca NHibernate s i fac datoria trebuie s crem nite proprieti publice care s conin datele.

O proprietate este simpla metod prin care setm i obinem valorile. Definim o proprietate declarnd o variabil privat care s in actualele date i combinaiile de get i set care s manipuleze valorile n variabila privat. private int _id; public int Id { get { return _id; } set { _id = value; } } Este posibil s crem o proprietate ReadOnly unde un utilizator s nu aibe acces la un setter, aceasta fiind singura metod de a manipula variabila privat din interiorul clasei. O proprietate ReadOnly va arta foarte similar cu o proprietate, cu un getter standard i un setter. Cum nu putem pune valorea NULL pentru tipul int de exemplu, putem pune o referin sau un tip generic. Dect s folosim o valoare de tip int n C#, vom folosi un int nulabil (int?).

Proprieti pentru chei strine


NHibernate uureaz munca pentru maparea cheilor strine. Trebuie doar s mapm cmpurile ca obiecte, iar fiecare cmp s fie un link ctre alt tabel i le putem vedea astfel ca obiecte relaionate.
OrderHeader order = OrderHeaderDataControl.GetById(1); foreach (OrderItem item in order.OrderItems) {}

Dupa cum se oberv avem order, i ne putem uita n toate OrderItems doar accesnd proprietatea OrderItems de pe obiectul OrderHeader. Acest lucru se definete ca orice alt proprietate, vom creea o variabil privat i o proprietate public. Tipul pe care l asignm proprietii va fi o alt clas, care va avea ca rol s reprezinte celelalte elemente. Deoarece cheia strin poate fi una la mai multe , mai multe la mai multe sau oricare alta, vom folosi o list generic de obiecte pentru a ine coleciile. De obicei se folosete interfaa generic IList pentru a grupa obiecte, deoarece le putem casta n orice alt colecie care are IList implementat ca o list pentru a obine o filtrare sau sortare.

Maparea datelor
Simplu spus, spunem NHibernate despre baza de date pe care am creato, cum sunt cmpurile i tabelele legate. Trebuie s spunem NHibernate de asemenea cum asignam cheile primare i tipurile de date pe care le vom folosi pentru a reprezenta datele, n ce variabile le vom stoca i asa mai departe. Sunt dou metode de baz pentru a mapa date n NHibernate, bine cunoscuta mapare XML ntr-un fiier hbm.xml i mai nou stilul Fluent NHibernate, care este similar paternului de interfa introdus cu frameworkul 3.5 .NET. n ambele cazuri se creaz un document pentru fiecare din tabele. Se va mapa fiecare cmp din baza de date la proprietatea care a fost creat pentru a le reprezenta n clase.
Maparea XML

Maparea XML este cu sigurana cea mai comun metod de mapare a entitilor cu NHibernate. Are la baz un document XML care conine toate informaiile despre clasele noastre i cum vor fi mapate la tabelele din baza de date. Aceste documente au o serie de avantaje: sunt fiiere text, deci sunt foarte mici sunt uor de citit au un numar mic de taguri pentru a descrie datele

Cele mai mari probleme n legtur cu maparea XML este poliloghia textului i faptul c nu este compilat. Acest lucru poate fi rezolvat limitnd numrul de date pe care le punem n document. Este un numr de parametrii opional care nu sunt neaprat necesari pentru a fi mapai, dar care pot oferi informaii adiionale despre baza de date. Fr compilare cnd baza de date se schimb sau clasele se schimb, este dificil s detectezi erorile pn cnd aplicaia este cu adevarat executat i NHibernate ncearc s refac structura bazei de date prin maparea claselor. Putem mapa proprieti pentru cmpurile din clase folosind taguri de id sau property. Aceste taguri sunt cmpuri standard n baza de date, nu chei strine. Tagurile id i property au un patern standard i au un numr opional de parametrii. Acest lucru se face definnd proprieti pe clasa pe care o mapeaz. Unul din atributele opionale foarte folosit este atributul type. Cu acest atribut poi spune NHibernate c se folosete un tip de dat particular pentru a stoca informaiile n clas.

Prima prorietate a claselor care trebuie mapat este proprietatea ID. Acest tag are un numr opional de atribute ce pot fi setate, cel mai simplu mod fiind: <id name="Id"> <generator class="hilo"/> </id> Acest lucru arat NHibernate c avem o proprietate n clasa noastr numit Id care este mapat unui cmp n baza de date denumite Id, se poate folosi i metoda hilo pentru a genera o valoare pentru acest cmp. Maparea Fluent n timp ce maparea XML este fr discutie cea mai comun metod de mapare, metoda fluent NHibernate ncepe s ctige teren. Acesta este un proiect separat fa de proiectul de baz NHibernate. Avantajele maprii fluent n daun maprii XML sunt urmatoarele: Timpul de validare al maprii: XML nu este evaluat de compilator, aa c proprietile din clase i alte erori n hbm.xml nu vor fi detectate pn cnd aplicaia nu este executat. Mai puine linii de cod, verbozitatea. Mai puine repetiii: dect s repei acelai XML de fiecare dat n interfaa fluent sunt expuse avantajele codului.

Fluent NHibernate ofer aceste avantaje mutnd maprile din documentele xml direct n cod. Acestea sunt compilate mpreun cu aplicaia. Poi folosi de asemenea configuraia de sistem a fluentului pentru a specifica paternurile pentru a face codul mai simplu i mai uor de citit. Codul este mai uor de citit, doarece este mai scurt. Avantajele fluent sunt multe, de la cod simplu compilat pn la faptul c este capabil s potriveasc ntreaga mapare a tabelelor ntro pagin. Dac eti n cutarea unei metode mai simple, pot fi folosite o serie de convenii simple cnd este creat baza de date. Se poate folosi AUTO PERSISTENCE MODEL pentru a mapa automat datele i nu ai nevoie s scrii nici un fel de cod de mapare. Aceasta metod este perfect dac ai control asupra structuturii bazei de date. Tot ce trebuie s faci este s i creezi tabelele , s i creezi obiectele i s spui fluent s auto mapeze tabelele, clasele, deoarece ele au acelai nume. Mai mult chiar, trebuie doar s i creezi POCO i s foloseti NHibernate s generezi baza de date i Fluent NHibernate o va mapa.

Ce este o sesiune NHibernate?


Ne imaginm sesiunea NHibernate ca o conduit abstract sau virtual asupra bazei de date. S-au dus vremurile cnd trebuia s crem o conexiune, s deschidem o conexiune, s pasm conexiunea unui obiect comand, s crem un DataReader din obiectul comand i aa mai departe. Cu NHibernate se poate ntreba SessionFactory pentru un obiect Session, i asta este tot. NHibernate se ocup de toate sesiunile reale asupra bazei de date, conexiuni. Beneficiile sunt imediate, nefiind nevoie s tim complexitatea lucrurilor din spatele bazei de date la care ncercm s ne conectm.

Session factory
Printr-o linie de cod se poate construi un obiect Session Factory din obiectul cfg care este folosit pentru a crea sesiuni: ISessionFactory sessionFactory = cfg.BuildSessionFactory(); De fiecare dat cnd ai nevoie s creezi o sesiune este nevoie doar s ceri session factory s deschid o sesiune pentru tine, dupa cum urmeaz: ISession session = sessionFactory.OpenSession(); Adiional deschiznd o sesiune, vrem s ncadrm elementele ntr-o tranzacie pentru a scdea baza de date ulterior. Dei pare c o tranzacie nou creat marete baza de date, n realitate baza de date deja folosete o serie de tranzacii pentru fiecare apelare pe care o facem, astfel spunndu-i explicit s creeze o singur tranzacie pentru toate operaiile defapt micoram numrul de apelri pe care le face. Pentru a creea o tranzacie pentru sesiune, trebuie doar s spunem sesiunii s inceap o tranzacie: ITransaction tx = session.BeginTransaction();

Crearea unei sesiuni n NHibernate


Sesiunile n NHibernate nu sunt foarte complicate dar sunt extrem de puternice. Cu o sesiune NHibernate poi face toate operaiile CRUD cu uurin.
ISession session = sessionFactory.OpenSession(); ITransaction tx = session.BeginTransaction();

Contact contact = new Contact("Joe", "Jones", "jj@nhibernate.com"); Address address = new Address("123 USA St", null, "MainTown", "IL", "80305"); contact.Addresses = new List<Address>(); contact.Addresses.Add(address); session.SaveOrUpdate(contact); tx.Commit();

Cu cteva linii de cod am creat un nou contact pe care l-am stocat n baza de date. Primele dou linii creaz o sesiune din session factory i ncep o tranzacie. Commit() are rolul de a nchide tranzacia i de a sincroniza obiectele cu baza de date. Apelnd aceast comand anunm NHibernate c am remprosptat nregistrrile din tranzacie i ar trebui puse n baza de date.
Sesiunea NHibernate versus sesiunea bazei de date

O sesiune NHibernate ncapsuleaz i abstractizeaz sesiunea bazei de date. Cnd folosim NHibernate, nu trebuie s ne ngrijorm de foarte multe operaii n baza de date pentru a include operaii SQL sau manipulri de sesiune. Lsm totul n seama session factory.

Sesiuni n ASP.NET
Datorit faptului c ASP.NET are o natur schimbtoare, managementul tradiional al sesiunii nu merge aa bine. dac ncerci s creezi o singur sesiune i s o foloseti dealungul mai multor pagini, atunci este foarte dificl de gestionat. Sunt cteva strategii ce pot fi folosite pentru a evita aceste probleme, implemetnd un patern Singleton, care s stocheze sesiunea n contextul userului, sau s foloseti un alt framework de exemplu NHibernate.Burrow. Singleton este probabil cel mai uor de implementat. Trebuie doar creat o clas sigilat (toate variabilele clasei sunt declarate static) i apoi s fie creat o proprietate numit Instance. Atunci se poate crea un constructor non-static care are detaliile implementate cum ar fi proprietatea SessionFactory. O alt strategie este s stochezi sesiunea n Context.Items folosind metodele Application_BeginRequest i Application_EndRequest n Global.asax.

Configurare

O configurare NHibernate la SQL Server are cteva probleme. Cel mai clar este faptul c stringul de conectare este hard-codat n aplicaie. Dac se dorete a fi schimbat, codul va trebui s fie recompilat. Cnd aplicaiile sunt promovate prin nivele de Software Development Lifecycle (SDLC) de obicei se folosesc alte medii cu cerine diferite pentru configurare. Este de obicei mai uor s ai informaiile de configurare abastracte ntr-un fiier. O versiune separat a acestui fiier poate fi meninut pentru fiecare mediu. Pentru o configurare sunt cinci opiuni ce trebuie setate: ConnectionProvider, Dialect, ConnectionDriver, ConnectionString i ProxyFactoryFactoryClass. Toate aceste elemente au o proprietate numit name care este folosit pentru a seta o valoare. Aceste proprieti vor fi setate la fel n fiierul de configurare. Proprietatea ConnectionDriver nu este obligatorie, deoarece setnd dialectul, se va ocupa de driverul de setri folosind nite valori implicite. Aceste setri ofer informaii de baz ctre ConnectionDriver iar acesta trebuie s ruleze maparea. Proprietatea ConnectionProvider spune NHibernate ce metod are nevoie s foloseasc pentru a contrui o conexiune. Aceasta este folosit pentru a seta NHibernate.Connection.DriverConnectionProvider, dar ali provideri pot fi folosii pentru a oferi ntregul nume al clasei ("MyCode.MyCustomProvider, MyCodeAssy"). Proprietatea Dialect permite NHibernate s fie limbajul bazei de date . n cazul folosirii unei conexiuni cu o baz de date MS SQL Server 2008, atunci se va folosi NHibernate.Dialect.MsSql2008Dialect . ConnectionStringName ofer NHibernate informaii cum s se conecteze la baza de date. Proprietatea ConnectionString accept un string care este defapt stringul de conectare n timp ce ConnectionStringName specific o conexiune n seciunea de conexiune din configurare. Proprietatea ProxyFactoryFactoryClass este folosit s permita NHibernate s execute ncrcri. De exemplu dac ai o instana pentru Ordering.OrderHeader i ii accesezi proprietatea OrderItems, NHibernate va ncrca (din baza de date) toate obiectele asociate automat, fr s fie nevoie s se scrie alte interogri. Trei fabrici de proxy de baz vin cu NHibernate : NHibernate.ByteCode.LinFu.ProxyFactoryFactory NHibernate.ByteCode.Castle.ProxyFactoryFactory NHibernate.ByteCode.Spring.ProxyFactoryFactory

Majoritatea se mulumesc cu LinFu, considernd c are mbuntiri de vitez fa de Castle. Castle DynamicProxy a fost implementarea standard NHibernate mai muli ani dar muli utilizatori NHibernate nca o folosesc. Acesta este folositor dac decizi s implementezi un Active Record Pattern. Propietatea final care trebuie adugat n mapare este un element sau assembly 29 care conine numele assembly-ului mapat.

Abstractizarea configuraiilor
Unul din cele mai comune moduri de configurare NHibernate este s pui configurarea n fiierele web.config sau app.config ale aplicaiei. Alte setri pentru aplicaie sunt deja stocate aici cum ar fi setrile aplicaiei n blocul <appSettings> i stringul pentru conectarea la baza de date n blocul <connectionStrings> . Punnd informaiile de configurare n Web.config, putem consolida toate informaiile de configurare mpreun i s culegem roadele unei protecii asupra acestui fiier. Pentru a beneficia de aceste avantaje prin maparea n fiierul Web.config(App.config), trebuie s adaugi seciunea de configurare.

Metode de acces ale obiectelor


Trebuie creat o metod Save() care se va ocupa de operaiile de creare i updatare, o metoda Delete() care s se ocupe de stergere, i cteva GetX() care s returneze date. Pentru a implementa metode de baza Save() i Delete() trebuie fcute dou lucruri: scrierea logic a metodei punerea metodei ntr-o tranzacie

Tranzacia este important, deoarece dac ceva merge prost i aciunea nu poate fi completat atunci putem relua tranzacia i o putem manipula din cod. Metoda de Save() este destul de uoar. Crem o tranzacie i apelm Session.SaveOrUpdate() (lsm totul n seama NHibernate s se ocupe de inserri sau editri) i Commit() cnd tranzacia este finalizat. Dac apare o eroare putem relua tranzacia i s vizualizm eroarea n log.

29

Este un limbaj de programare n care fiecare interogare corespunde unei singure instruciuni pe o main

O alt metod foarte folositoare este Refresh(). Aceasta metod apeleaz Session.Refresh() asupra unui obiect , fornd NHibernate s returneze ultimele obiecte din baza de date direct. Acest lucru este folositor dac avem un proces extern, serviciu, sau un user care ar putea s interacioneze cu baza de date . Alte metode foarte folosite sunt GetById() i GetAll(). Metoda GetByID() este destul de uor de implementat deoarece NHibernate deja tie cum s ii obina un obiect folosind un identificator unic.
public Contact GetById(int Id) { return Session.Get<Contact>(Id); }

Structura FieldNames
Unul din cele mai importante lucuri care pot fi facute este s generezi o structur FieldNames. Dei utilizatorii se plng c nregistrrile nu sunt destul de eficace, deoarece structura bazei de date se schimb sau dac au o eroare n cod nu vor ti momentul n care compilatorul a depistat eroarea. criteria.Add(Restriction.Eq("FirstName", fName); Acest exemplu nu va funciona deoarece n baza de date numele este FirstName i nu Fname, astfel codul se va compila fr probleme, dar cnd va fi rulat vom obine o excepie deoarece FirstName nu exist n obiectul nostru. O metoda simpl de a evita aceasta problem este s foloseti structura FieldNames, care va mapa numele proprietilor la o structur local unde poate fi accesat. n acest caz structura de mai sus se modific astfel: criteria.Add(Restriction.Eq(FieldNames.FirstName, fName); n acest caz dac numele nu este dat corect , compilatorul ne va afia eroare.

Obiectul ICriteria
Cea mai bun metod s faci interogri cu NHibernate este s foloseti obiecte de tip criteria. Obiectul ICriteria este creat dintr-o sesiune folosind sintaxa Session.CreateCriteria<T>() sau Session.CreateCriteria(Of T)(). Trecnd la un tip, pur i simplu spunem NHibernate ce tip de obiecte vor fi interogate:

ICriteria criteria = Session.CreateCriteria<Contact>(); care este echivalentul pentru SELECT * FROM Contact;

ndat ce obiectul ICriteria a fost construit, putem cu uurin s cerem acestuia s returneze nregistrrile dorite. Dac se dorete retunarea unei liste de obiecte, n acest caz, o list de obiecte de tip Contact, se apeleaz criteria.List<T>() sau criteria.List(Of T)(). IList<Contact> contacts= criteria.List<Contact>(); Dac se dorete ca interogarea s returneze o singur nregistrare i s returneze NULL n caz contrar, se poate folosi UniqueResult<type>(). Contact contact=criteria.UniqueResult<Contact>(); Pentru a face accesul la date mai funcional se va implementa o metod GetAll() care returneaz toate nregistrrile. De asemenea se va crea i GetCountOfAll(), cu parametrii adiionali care ne va permite s folosim functionalitaile controlalelor framework-ului ASP.NET cnd avem rezultate mai mari. Folosind un obiect ICriteria ne uureaz munca pentru a scrie metoda GetAll(). Tot ce trebuie s faci este un nou obiect ICriteria i s apelezi List<T>() pe ea, iar acesta va returna toate obiectele de acest tip. Pentru a crea GetCountOfAll() , se va folosi ceva nou, i anume Projection. Pe scurt o proiecie spune: dect s returnezi toate datele, mai bine d-mi informaiile pe care le cer. Unul din cele mai comune proiecii pe care le folosim sunt Projections.RowCount() i Projections.Distinct(). Pentru a obine numrul de nregistrri pentru GetCountOfAll(), trebuie doar s crem un obiect ICriteria, i s apelm .SetProjection() pe ICriteria, astfel i spunem c avem nevoie de proiecia RowCount(), i cerem rezultatul. Metoda de GetAll() este foarte folositoare, dar dac se dorete doar o parte din nregistrri? Pentru a face acest lucru trebuie doar s ii spunem ce nregistrare s aduc i de unde. Cu o variabil , SortExpession, putem s i spunem s sorteze nregistrrile, i astfel paginarea i sortarea poate fi adugate pe un control de tip gridview. Pentru a realiza acest lucru trebuie s dm un int pentru firstResult i s returneze un alt int pentru maxResults, i un string pentru sortExpression.

Filtrare ICriteria

Metodele GetById() i GetAll() sunt excelente, dar ele fac prea puin. Daca nu vrem toate nregistrrile, doar cele cu o anumit valoare, vom folosi n NHibernate un lucru numit Restrictions pentru a filtra colecia. Unul din cele mai comune aciuni de filtrare este s restricionezi setul de rezultate la o valoare particular.

Legarea datelor
Legarea datelor este destul de simpl n ASP.NET. Adugnd cteva controale pe pagin i setnd cteva proprieti , pagina HTML poate deveni o pagin dinamic vie. Se pot aduga date n baza de date i apoi s fie afiate pe pagin n orice fel se dorete. Sunt cteva metode simple prin care se pot lega datele. La baza elementor este o surs de date, niste elemente pe care le vom lega i un control care permite aceste date. n mod esenial o surs de date este o instan sau o colecie de instane care va fi folosit pentru a popula controalele. Sunt dou metode comune prin care se poate seta o surs de date pentru un control. Prima este directa, legnd datele din cod sau dintr-un alt proiect. A doua este prin a folosi un DataSourceId pentru a specifica id-ul controlului pe pagin cum ar fi un control ObjectDataSource de unde vin datele. Datele individuale care formeaz sursa de date poate fi aproape orice, de la un simplu string pana la un POCO cu proprieti i copii POCO. Sunt mai multe controale ce permit legarea datelor, cum ar fi DataGrid, ListView, Repreater, Datalist, i chiar Textbox sau Label. Aceste controale pot fi legate n 2 metode, simplu sau printr-o legtur complex. Prin legtur simpl, putem lega o singur proprietate cum ar fi Image, la o proprietate a unui control Text. Legarea complex permite s legi una sau mai multe proprieti ale sursei de date pentru unul sau mai multe controale. Acest lucru funcioneaz bine cu colecia de nregistrri, chiar dac colecia conine o singur nregistrare. Fiecare control are o prim metod prin care datele se pot lega de ele, i n general vor fi mprite n dou categorii, legtur direct sau ablon. Un control legat printr-o legtura simpl folosete cmpuri individuale cum ar fi proprietile .Text i .Value sau controale individuale cum ar fi <asp:BoundField> i <asp:ImageField> . Alte exemple sunt <asp:DropDownList> i <asp:CheckBoxList>.

Controlul <asp:DropDownList> expune proprietatea DataSource , DataTextField, i DataValueField. Setnd aceste proprieti, fie n paginile ASPX sau n cod, datele vor fi legate de control. Cnd folosim un control ablon, specificm cum ar trebui s arate pagina ASPX. Crem un design pentru fiecare element i controlul apare atunci cnd este facut legtura cu datele. Cnd crem un layout , trebuie s afim datele n interiorul acestuia. Putem face acest lucru prin mai multe metode, dar cea mai uoar trebuie s fie Eval(PropertyName). Pentru a afia datele ce vor fi afiate trebuie doar s spui Eval() numele proprietii n sursa de date, pe care vrei s o afiezi. Dac se dorete modificarea formatului datelor, se pot folosi metode de formatare standard al stringurilor, string.Format().

Controlul <asp:ListView>
Unul din cele mai versatile controale trebuie s fie <asp:ListView> . Acest control are cteva proprieti interesante i este ideal pentru legtura cu datele, special cu dynamic web world cu JavaScript i CSS. Una din aceste proprieti este blocul <LayoutTemplate> care i permite s precizezi un ambalaj pentru datele generate. Acest lucru nseamn s creezi un set de taguri pentru date. Acestea ar putea fi <ul>, taguri pentru <li> , un set de <div> sau taguri de tip <table>, sau orice alt cod.

Controlul <asp:ObjectDataSource>
O metod excelent n lucru cu date NHibernate este,legatura de date la controale prin care se populeaz controalele cu un <asp:ObjectDataSource>. Acest control permite s specifici ce tip de obiecte va returna controlul(DataObjectTypeName) i de ce obiecte controlul va avea nevoie s accese pentru a efectua operaii CRUD (TypeName). Controlul <asp:ObjectDataSource> are nevoie doar de 4 lucruri pentru a funciona: Id, DataObjectTypeName (POCO), un Type Name (Data Access Object) i metoda CRUD.
Legtura directa

Cea mai uoar (dar cea mai grea de meninut) metod de a lega date la controale este s retunezi date din cod i s le setezi la proprietatea DataSource a controlului.

Controlul <asp:FormView> este cel mai uor de adaugat i manipulat n aplicaiile .NET. Are ca abloane <ItemTemplate> (doar pentru vizualizare). <InsertItemTemplate> (pentru inserare). <EditItemTemplate> (pentru editare) i <EmptyDataTemplate>.

Controale intregrate
Dou controale sunt eseniale, dac ai nevoie de securitate pe site, se vor folosii controalele <asp:Login> i <asp:LoginStatus> pentru a arta loginul i statusul de logare pentru un user. Aceste controale mpreun cu un form de autentficare ofer fundaia de baz pentru securitatea n aplicaiile .NET.

Securitatea locaiei
O alt metod de a avea un control asupra securitii este s adaugi nite elemente de configurare n web.config. Se poate folosi <location> pentru a specifica numele directorului sau a unei pagini i apoi s foloseti un bloc <authorization> pentru a controla accesul. Elementul <location> este de obicei pus n web.config imediat dup elementul </system.web> care face parte din blocul <configuration>. Controlul securitii are dou opiuni majore, allow (permite) i deny (refuz). Se poate specifica de asemenea dac se dorete ca securitatea s se asigure pentru toat lumea(*), sau dac vor exista useri anonimi(?).

Roluri pe baz de utilizatori


Avnd posibilitatea de a putea folosi logarea unor user, se poate face o filtrare a datelor bazate pe accesul pe o pagin a unui user. Folosind clasa System.Web.Security.RoleProvider se poate extinde controlul, aprnd concepul de roluri. Pentru ca rolurile s fie operaionale n NHibernate, trebuie implementat clasa System.Web.Security.RoleProvider. Clasa este special conceput pentru a permite utilizatorului s implementeze n ASP.NET modelul de roluri care i se pare lui logic. Aceasta are aproape 15 metode i proprieti ce pot fi suprascrise, dac este nevoie. Defapt este nevoie s ne concentrm doar pe o metod ce trebuie implementat: GetRolesForUser(). Aceast metod returneaz o list de stringuri continnd numele, rolurile care aparin unui utilizator.

Configurarea furnizorului
Avnd furnizorul scris, trebuie doar s indicm ASP.NET cum s l foloseasc. n web.config, sub blocul <membership>, se va aduga un bloc <roleManager>. Este suficient s furnizezi un nume i un tip, pentru ca ASP.NET s localizeze codul i se pot folosi toate controale de tip rol. Odat ce au fost mapate clasele, se poate aduga un rol Administrator n baza de date, i se pot aduga utilizatori. Este foarte important s se populeze tabelul pentru roluri la logare pentru ca userii s aibe roluri. NHibernate ofer cteva tool-uri. Fiecare produs are o prezentare de baz a codului i de asemenea o list de cerine pentru o operaie NHibernate. Criteriile sunt urmtoarele: Editarea: poate fi template-ul folosit pentru a genera codul NHibernate s fie modificat? Clase pariale: poate produsul s foloseasc clase pariale pentru a genera Data Acces i straturile POCO? N-nivele: poate generatorul s separe Data Access, POCO i layerele de prezentare n layere discrete i uor de folosit? Data Access: poate generatorul s creeze interogri de baz cum ar fi GetByID, GetALL, GetBy(index field), GetCount, i aa mai departe? MTM: poate generatorul s mapeze corect i s gestioneze corect relaionrile mai multe la mai multe? Plugin Visual Studio: poate generatorul s fie executat din Visual Studio? ntegrarea n procesul de build: poate generatorul s fie o parte a procesului de executare? Sursa editabil: poate fi codul surs modificat?

Fiecare criteriu va fi notat pe o scar de la 0 la 5 pentru fiecare produs generator de cod NHibernate, ce au ca scop uurarea muncii, ne mai fiind nevoie s mapezi manual baza de date la POCO: CodeSmith: unul din cele mai cunoscute generatoare de cod de pe piaa este CodeSmith. Produsul a fost iniial o surs gratis dar dup caiva ani a devenit un produs ce poate fi folosit total doar cu licen. O serie de versiuni de test se gsesc la adresa: http://www.codesmithtools.com/ nhib-gen: Este o surs deschis http://sourceforge.net/projects/nhib-gen , ce are incluse un set de clase ce pot fi implementatate n ntreaga soluie NHibernate

AjGenesis: http://ajgenesis.codeplex.com/ , potrivit autorului genereaz orice text artefact, plecnd de la modele i template-uri gratis Visual NHibernate: o alt metod prin care te poi uita la proiectul NHibernate este s foloseti un modelator visual, cum ar fi Visual NHibernate http://www.slyce.com/VisualNHibernate/ MyGeneration: unul din cele mai bune coduri. Este o surs deschis, gratis. http://www.mygenerationsoftware.com , http://sourceforge.net/projects/mygeneration NGen Nhibernate: sursa deschis, http://sourceforge.net/projects/ngennhibernatec NHModeller: acest produs decupleaz modelul de structur de date intr-o manier ndemanatic. http://nhmodeller.selfip.com/ Microsoft T4 T4 hbm2net Editarea Clase pariale 5 5 4 3 3 1 5 0 5 Nnivele 5 5 1 4 5 4 1 1 1 Data Access 3 5 0 5 0 5 0 3 3 MTM Plugin Visual Studio 5 5 2 5 0 0 2 5 2 Build Surs editabil 0 5 5 0 5 5 0 0 5

CodeSmith nhib-gen AjGenesis Visual Nh MyGeneration NGen Nhibernate NHModeller Microsoft T4 T4 hbm2net

5 5 5 5 5 4 0 4 5

5 5 5 5 5 0 5 0 5

5 5 5 0 5 0 5 5 5

Conversia template-urilor CSS


De obicei se folosete master page pentru a furniza o tem constant website-ului, Cteva concepte de baz sunt urmatoarele: Crearea unui master page Crearea unei teme ASP.NET Mutarea informaiei CSS din template n tem Copierea HTML din template n master page nlocuirea coninutului din template cu regiuni <asp:ContentPlaceHolder>