Introducere în dezvoltarea aplicațiilor web ASP.NET MVC (1.0) Introducere în dezvoltarea aplicațiilor web Radu-Mihail Obadă radu-mihail.obada@student-partners.com
Aplicație web? „O aplicație care este accesată prin intermediul unui navigator web peste o rețea precum Internet sau intranet.” [Wikipedia]
Model View Controller „Șablon arhitectural folosit în ingineria software. Izolează logica aplicației (business logic) de prezentare și input.” [Wikipedia] 1979, Smalltalk la Xerox PARC Mai multe arome: Model View Presenter (.NET Framework), „model-view-controller-connector” (XForms) etc.
MVC în imagini
MVC—pe web Foarte popular pentru dezvoltarea aplicațiilor web. În special în frameworks agile (Spring Web MVC, Ruby on Rails etc.) Permite o separare excelentă a responsabilităților (concerns) pentru aplicații distribuite n-tier, i. e. cele mai multe aplicații web.
MVC: Model Reprezentarea datelor specifice domeniului. Domain logic structurează datele, dându-le înțeles. Modelul nu este data access layer, dar DAL se subînțelege că e încapsulat de model.
MVC: View Prezintă, într-un mod sau altul, modelul. Pot exista mai multe views pentru același model. De cele mai multe ori, reprezintă interfața cu utilizatorul.
MVC: Controller Liantul MVC. Primește și gestionează interacțiunea cu utilizatorul (input). Apelează modelul. Inițiază un răspuns.
Exemplu arhitectural Model: business objects care implementează business rules, i. e. Persoană, Contact etc. View: (X)HTML, generat de aplicație plecând de la datele din model. Controller: tratează cererile HTTP GET și HTTP POST, le direcționează către business objects și prezintă views.
Microsoft: evoluția platformei web Programe CGI și filtre ISAPI (anii ‘90) pentru IIS. Active Server Pages (sfârșitul anilor ‘90): sistem de șabloane (templating), cod și mark-up în același loc, dynamic scripting ASP.NET (2002): model de programare bazat pe evenimente; postbacks și viewstate
ASP.NET MVC: de ce? (1) MVC Decuplarea straturilor. Separarea responsabilităților (concerns). Test-Driven Design.
ASP.NET MVC: de ce? (2) Control integral asupra codului HTML. Motoare multiple pentru prezentare (view engines). URL-uri curate. Ușurință REST.
ASP.NET MVC versus Web Forms ASP.NET Web Forms Model, View, Controller Test-Driven Design Control total al HTML-ului generat Interfețe REST pentru ULR-uri Se integrează excelent cu jQuery sau ExtJS Permite o abordare agilă Model bazat pe evenimente Mediu RAD Controale server-side puternice Ascunde problema păstrării stării Ecosistem foarte bogat, în special pentru controale Foarte ușor de abordat de dezvoltatorii desktop
Cum se întâmplă? (1) UrlRoutingModule->Route. Route->IRouteHandler. IRouteHandler->MvcHandler. MvcHandler->Controller.
Cum se întâmplă? (2) Stadiu Detalii Primește prima cerere pentru aplicație Global.asax, Route sunt adăugate la RouteTable Routing UrlRoutingModule->(…)->Controller MVC Request Handler MvcRouteHandler->MvcHandler Se creează Controller MvcHandler->IControllerFactory Se execută Controller Controller->Execute() Se invocă o acțiune Controller->Action() Se execută rezultatul View
ASP.NET MVC: Routing Mapează un URL pe o acțiune a unui controller Web.config (nu) sau Global.asax RouteTable, se parcurge de sus în jos Parametrizate Pot adăuga constrângeri
ASP.NET MVC: Controllers O simplă clasă Pot deriva din System.Web.Mvc.Controller Metodele sunt acțiuni Acțiunile întorc un rezultat: view nimic conținut … Orice altceva este convertit în text
ASP.NET MVC: Views Motorul implicit pentru views este… WebForms! Nu mai am controale server (<asp:… />) Script blocks: <% %> HTML Helpers: funcționalități de-a gata pentru bucățile de HTML utilizate des Pot avea views parțiale Pot schimba motorul de views
ASP.NET MVC: Model Business objects POCO: Plain Old C# Objects Entity Framework LINQ to SQL …
ASP.NET MVC: hands-on lab Un laborator intensiv despre ASP.NET MVC organizat de echipa Microsoft Student Partners
MVC: Implementări alternative MonoRail Maverick.NET PureMVC Spring Framework .NET
Resurse http://asp.net/mvc/—situl oficial http://msdn.microsoft.com/en-us/aa336522.aspx—MSDN http://weblogs.asp.net/Scottgu/—Scott Guthrie
Resurse (2) http://fmi.unibuc.ro/msp/—Echipa MSP @ fmi, unibuc radu-mihail.obada@student-partners.com (eu)
Fin Mulțumesc!