La dezvoltarea productivității și a eficienței MVC 3 schele

Ca și în ultimul articol am vorbit despre conceptele de bază și biblioteca (ASP.NET MVC, Entity Framework), acum nu voi insista asupra ei în detaliu. Un exemplu ar fi utilizarea de schele. pe care am menționat în momentul precedent.

Disclaimer. Constat că schela - este, în general vorbind, generarea rapidă de nimic, în scopul îmbunătățirii în continuare, și nu o modalitate de a scrie rapid aplicatii complexe complet.

Poate că singurul lucru pe care am uitat să opresc la ultima dată, ea NuGet. Însăși ideea de ea nu este nou (apt-get, Ruby Gems, etc.), dar faptul că este acum disponibil în Visual Studio este foarte bun. În urma descrierii de pe site-ul oficial:

NuGet este o extensie Visual Studio pe care îl face ușor de instalat și de a actualiza biblioteci open source și instrumente în Visual Studio.

În principiu, nimic de adăugat, dar eu sunt încă un pic add :)

De asemenea, este important de remarcat faptul că, atunci când creați pachetul, puteți specifica dependențele care sunt descărcate și instalate în mod automat. Probabil ca cineva va fi, de asemenea, interesant pentru a conecta sursa de pachete privat (server simplu sau un folder partajat), la egalitate cu nuget.org.

Pentru mai multe informații despre NuGet și Package Manager pot fi găsite în documentația de pe site-ul oficial. Iar pentru cei care prefera un blog format, eu pot recomanda un articol Scott Hanselmann - Introducerea NuPack Pachet de management pentru .NET - O altă bucată de Web stivă.

Configurarea conexiunii bazei de date

Pentru a nu deveni atașat la setul (sau nu) set versiuni, am decis să utilizeze Microsoft SQL Server Compact Edition - o bază de date ușor, care nu necesită configurare și nu este necesară pentru a rula serviciile.

Pentru a utiliza SQL Server CE, pur și simplu descărcați pachetul corespunzător (în cazul în care SQL Server CE nu este încă conectat la proiect), comanda in consola:

PM> Instalare Pachet SqlServerCompact

Apoi, trebuie să corectați în șirul de conexiune web.config existente (ApplicationServices implicit) și se adaugă un șir de conexiune cu numele care se potrivește cu numele contextului (în plus nu pentru a configura nimic):

Pentru înregistrare - înainte de lansarea Entity Framework 4.1 (care a apărut în sprijinul său CodeFirst) ar putea fi descărcat NuGet-pack EFCodeFirst.SqlServerCompact, care (cu alte câteva pachete) se adaugă un astfel de sprijin pentru Entity Framework 4.

generarea de baze de date Reglarea

Să presupunem că avem de gând să dezvolte în continuare modelul nostru, așa cum se întâmplă de obicei cu proiecte reale, nu-i așa? ;) În acest caz, avem nevoie de a re-crea baza de date, dacă modificați modelul (dacă lăsați toate implicit, caz în care obținem excepția). Este suficient pentru a „Global.asax.cs“ pentru a adăuga o linie în metoda „Application_Start“:

În orice caz, pentru a clarifica câteva puncte:

  • Nu utilizați acest mod în utilizarea experimentală / industrială, pentru că veți pierde datele introduse de utilizatori.
  • Pentru a umple baza de date cu datele de testare pot fi moștenite de la clasa si suprascrie DropCreateDatabaseIfModelChanges metoda de semințe. Mai multe informații despre acest lucru pot fi găsite în blog-ul echipei ADO.NET.
  • spațiu „System.Data.Entity“ nume folosit (acest lucru este în cazul în care dintr-o dată IDE-ul nu oferă în mod automat pentru a adăuga o folosind).

Declarația problemei

Să punem problema în acest fel:

De fapt, ne-am descris mai sus set de modele pentru aplicația noastră. Modelele în sine, vom crea un pic mai târziu. În ceea ce privește crearea de modele, este drept, ele ar trebui să creeze un tip de proiect separat „clasa Biblioteca“, cu toate acestea, sper că veți ierta-mă să le creați în același proiect :)

Notă: formularea problemei este foarte simplu, în special, există o relație mulți-la-mulți, fără de care rareori costa aplicații reale. Prin urmare, pentru a nu fi acuzat de falsificarea faptelor;), vreau să menționez - în momentul versiunea oficială a scaffolding'a un multi-la-multi nu este, cu toate acestea, dacă doriți, puteți scrie Montator schele dvs. (termen de MvcScaffolding, mai mult pe aceasta mai târziu). Același lucru este, probabil, se aplică și altor probleme care nu sunt acoperite de exemplu.

Schelă: un mod standard

Pentru a genera controlerele și punctele de vedere într-un mod standard, vă trebuie să instalați MVC 3 Instrumente de actualizare. Doar în cazul în care, permiteți-mi să vă reamintesc că această actualizare nu afectează biblioteca, și conține numai instrumentele actualizate, inclusiv crearea de controlere și puncte de vedere.

Crearea unui nou proiect prin selectarea dintr-o listă de „ASP.NET MVC 3 Web Application“. În acest proces, vom fi oferite pentru a specifica parametrii proiectului:

La dezvoltarea productivității și a eficienței MVC 3 schele

În același timp, vreau să atrag atenția asupra inovațiilor în MVC 3 Instrumente de actualizare - un nou șablon „Intranet Application“ și suport pentru HTML5 marcare semantic. Unitatea-teste până când plec în spatele scenei, astfel încât să nu pentru a umfla dimensiunea articolului.

Acum, după crearea proiectului, studioul ne întâlnește readme.txt fișier deschis (cu setările descrise în diferite IIS). De altfel, cel care a inventat-o ​​- de la meu de cinci-plus :) Dar acum nu deosebit de interesant.

În continuare, vom vedea că în structura familiară a proiectului nu este AccountController și toate fișierele asociate - o consecință a modelului de alegere pentru Intranet.

Acum, să creeze un model simplu, în conformitate cu producerea problemei de mai sus. Prin modul în care, pentru a facilita crearea lor am făcut în fișierul meu șablon Resharper SimpleModel pentru a nu crea de fiecare dată proprietăți „Id-ul“ și „Nume“. Acest lucru este, de asemenea, într-un fel, schela, dar eu nu am de gând să vorbesc despre toate Resharper și modelele sale, în special, dar cum ar fi :)

După aplicarea șablonului de clasă modelul arată astfel:

Acum putem adăuga controlerele din meniul contextual în Solution Explorer:

La dezvoltarea productivității și a eficienței MVC 3 schele

În caseta de dialog, selectați numele operatorului, o clasă de model și contextul (dacă nu, creați unul nou):

La dezvoltarea productivității și a eficienței MVC 3 schele

Prin experiment simplu, sa constatat că pentru specificarea contextului într-un dosar separat (de exemplu, modelele), trebuie să specificați dosarul prin punctul - „Models.MvcDemoContext“.

Acum, după ce faceți clic pe butonul „Add“, putem observa o ușoară magică (cel puțin pentru cei care nu au văzut niciodată o schelă în acțiune) - pentru proiectul nostru a adăugat fișierele necesare, și după rularea aplicației, putem efectua toate operațiunile stabilite CRUD (Create / citire / Actualizare / Ștergere) de pe modelele noastre. Mai mult decât atât, implicit de lucru de validare discret.

La dezvoltarea productivității și a eficienței MVC 3 schele

La dezvoltarea productivității și a eficienței MVC 3 schele

După cum puteți vedea, de lucru și de validare, chiar și pentru validarea non-intruziv pentru a introduce numere fracționare și date în formatul românesc trebuie să facă mișcări suplimentare.

MvcScaffolding - elementele de bază

același model poate fi utilizat pentru a economisi timp. Cei care sunt folosite pentru a verifica cu atenție toate, pot recomanda pentru a elimina controlorii deja generate și punctele de vedere, sau pentru a crea un nou proiect :)

Executați comanda consolă:

PM> Instalare Pachet MvcScaffolding

Această comandă va seta în același timp și T4Scaffolding (pachetul conținând infrastructura pentru schele, în general).

PM> schelă Controler Producator -Repository

Acest lucru va crea un controler și vederi care acceptă CRUD-operare. În acest caz, există două diferențe majore față de versiunea noastră anterioară (în afară de cosmetice).

Pentru a reutiliza aspectul pentru crearea și editarea folosind vedere parțială „_CreateOrEdit.cshtml“. Eu nu am de gând să mă opresc asupra avantajele și dezavantajele unei astfel de abordări. Pot spune doar că, în primul rând, nimeni nu deranjează să-l editați, apoi prezentarea, și, în al doilea rând, este posibil să se modifice șabloane pentru a genera și chiar generatorul (mai multe despre aceasta va spune mai târziu).

Prin interfata „Repository“ am generat în plus „IManufacturerRepository“ și clasa „ManufacturerRepository“. Nu pentru a le descrie în detaliu, pur si simplu da descrierea interfeței:

Din acest motiv, putem acum destul de ușor de utilizat interfață de injectare. de exemplu, testul unității.

MvcScaffolding - setare

Dacă generați prezentare folosind MvcScaffolding, atunci veți găsi că validarea discret pentru ei nu funcționează. Motivul este faptul că, spre deosebire de un schele standard (în MVC 3 Instrumente de actualizare), în următoarele reprezentări nu sunt script-uri linii de legătură:

Alternativ, aveți posibilitatea să le adăugați la „_Layout.cshtml“ (ceea ce, din nou, are argumente pro și contra), dar să reproducă comportamentul unei schele etalon.

Pentru a face acest lucru, executați comanda în consolă:

PM> schelă CustomTemplate MvcScaffolding.RazorView Creează

După comanda „Create.cs.t4“ fișier va apărea în proiectul nostru, care este șablonul T4 și va fi acum folosite pentru a genera (revenirea la utilizarea standard, puteți elimina pur și simplu acest șablon, sau redenumirea-l):

La dezvoltarea productivității și a eficienței MVC 3 schele

Acum, trebuie doar să adăugați câteva linii necesare în acest fișier, salvați-l și rulați comanda:

PM> schelă Controlor Producator -Repository -Force

Ultimul parametru indică faptul că am mers suprascrie fișierele noastre existente.

Dacă vom reporni aplicația, putem vedea că validarea discret a câștigat.

Opinia mea, ca urmare, că ambele variante de schele este un instrument bun pentru gama de aplicații. Foarte multumit cu posibilitatea de a extinde. Și despre modul în care se poate folosi pentru a scrie propriul generator, am să-ți spun data viitoare.

Esti un răspuns :) bun venit.

1. Va, probabil, nu singur. Data exactă nu poate fi încă numit.
2. Pe scurt - bine, deoarece nu duplica, așa de rău că, uneori, trebuie să faceți pentru a crea și edita un pic diferit, iar această abordare este un pic de oprire de a ridica și să fie împărțită în două de vedere (de fapt, deja funcționează :)

articole similare