Disainimustrid – MVC mustrite näidised algajatele
See selgitab, mis on MVC muster ja mis on ASP.NET MVC Framework, kuidas see töötab. Selgitab ka ASP.NET MVC lehe elutsüklit ja ASP.NET MVC funktsioonide versiooni.
Näidised on targad, et aidata algajatel ASP.NET MVC-st hõlpsasti aru saada ja omandada oskusi.
Nagu me kõik teame paljusid disainimustreid ja nende kasutamist ärikomponentide ja -teenuste juurutamisel oma rakendustes, seisame siiski silmitsi oma rakendustega seotud probleemide/väljakutsetega. Samuti muutuvad iga päevaga ärivajadused ja prioriteedid. Kui jälgime tähelepanelikult mitmeid probleeme, defekte ja väljakutseid, millega silmitsi seisame, on kasutajaliidese ja esitluse kihtides. Kuigi mõned vead on seotud äriloogika ja ärireeglitega, peame võib-olla need kasutajaliidese ja esitluse kihtides parandama, kuna võime äriloogika kasutajaliidese ja esitlustasanditesse tihedalt integreerida. Selle põhjuseks on see, et me ei ole keskendunud oma rakendustes õige disainimustri rakendamisele. Vaatame samm-sammult läbi ja mõistame, kuidas oma rakendustes esitlusmustrit rakendada ja kasutada.
Probleemipüstituses:
- Juba kasutate rakenduses erinevaid mustreid, kuid rakenduse säilitamine on endiselt keeruline.
- VS Testi, NUniti, MBUniti jne kasutamine äriloogika kihi testimiseks, kuid rakenduses on siiski mõned vead, kuna esitluskihiga seotud äriloogika.
- Rakenduses on kasutatud esitluskihti, äriloogikakihti, andmejuurdepääsukihti, kuid mõnikord tuleb siiski kirjutada esitluskihile üleliigne kood, et tarbida või kutsuda teisi mooduleid või muid kasutusjuhtumeid.
- Integreeritud moodulites muudatuste tegemisel ilmnevad integratsioonidefektid.
- Defektide parandamine ja täiustused võtavad rohkem aega esitlustasandi loogika ja selle integratsioonisõltuvuste analüüsimiseks ning uute defektide ilmnemiseks.
- ASP.NET MVC-d ei saa valida, kuna kasutajaliidest on keeruline ehitada.
Probleemi algpõhjus:
Esitluskihis
- Leht või vorm sisaldab juhtelemente, mis kuvavad rakenduse domeeni andmeid. Kasutaja saab andmeid muuta ja muudatused esitada. Leht hangib domeeni andmed, käsitleb kasutaja sündmusi, muudab sündmustele vastuseks lehe muid juhtelemente ja edastab muudetud domeeni andmed. Neid funktsioone täitva koodi lisamine veebilehel Lisaks on keeruline koodi jagada sama käitumist nõudvate veebilehtede vahel. klassi kompleks, mida on raske hooldada ja raske testida.
- UI kiht, kasutajaliidese loogika, esitlusloogika ja äriloogika on omavahel tihedalt seotud.
- Esitluskiht hoolitseb moodulite või kasutusjuhtude integreerimise eest.
Lahendus:
- Valige parim esitluskihi muster, et eraldada kasutajaliidese kiht, kasutajaliidese loogika ja esitlusloogika ning äriloogika eraldi kihtidena, et koodi oleks lihtsam mõista ja hooldada.
- Lubage lahtine sidumine moodulite väljatöötamisel või mis tahes kasutusjuhtudel.
- Maksimeerige automaatika abil testitavat koodi. (Vaadet on raske testida.)
- Jagage koodi lehtede vahel, mis nõuavad sama käitumist.
- Eraldage visuaalse kuva ja sündmuste käitlemise kohustused erinevatesse klassidesse, mida nimetatakse vastavalt vaateks ja esitajaks või kontrolleriks või ViewModeliks.
Esitlusmustri kasutamise eelised:
- Modulaarsus
- Testipõhine lähenemine – maksimeerige automaatika abil testitavat koodi
- Murede eraldamine
- Koodi jagamine lehtede ja vormide vahel
- Lihtne hooldada
Millised esitluskihtide mustrid on saadaval?
MVC (mudelivaate kontroller)
MVP (Model View Presenter) või (Model Passive View, Supervisor Controller)
MVVM (mudelivaate vaatemudel)
MVC vs MVP vs MVVM:
-
Kas mudel ja vaade tähistavad kõigis ülaltoodud kolmes mustris sama?
Jah
-
Kas kontrolleri, esitleja ja vaatemudeli eesmärk on kõigi ülaltoodud kolme mustri puhul sama?
Jah
-
Kas mudeli, vaate kontrolleriga, esitleja ja vaatemudeli suhtlus ja voog on samad?
Ei, see on põhjus, miks need 3 mustrit eksisteerivad.
-
Kas need mustrid asendavad PL (esitluskiht), BLL (äriloogikakiht) ja DAL (andmete juurdepääsukiht)
Ei, need mustrid on mõeldud kasutajaliidese ja kasutajaliidese loogika eraldamiseks esitlusloogikast ning võimaldavad lahtist sidumist.
Valige parim esitluskihi muster:
MVP
- Andmekonteksti kaudu sidumine pole võimalik
- Keeruline kasutajaliidese disain
- Parim Windowsi vormide, ASP.NET veebivormide ja Sharepointi rakenduste jaoks
MVC
- Parim lihtsa kasutajaliidese ASP.NET jaoks
- Ühenduseta mudel (vaadake eraldatust kõigist teistest kihtidest)
Märkus. Siin ei keskendu ma MVC VM-ile (MVC3-st pärit MVC ViewModel) ja sõltuvuse sisestamisega ASP.NET MVVM-ile.
MVVM
- Võimalik on sidumine andmekonteksti kaudu
- Ühendatud mudel
- Parim WPF-i ja Silverlighti rakenduste jaoks
ASP.NET Web Forms vs ASP.NET MVC:
ASP.NETi veebivormid
- RAD
- Lihtsam areng
- Rikas kontrollib ökosüsteemi
- Tuntud kui Windows Formsi arenduse arendusviis
- Ei
ViewState
ja puudub tagasipostituse tugi
ASP.NET MVC
- Puhas mure eraldamine (SoC)
- Täielik märgistuse kontroll
- Luba TDD (testipõhine arendus)
- Lubage ja muudab hõlpsaks PUHASTAMISE
- Lihtsam kliendipoolne integreerimine (Javascript)
- Multi View Engine (see on tõesti lahe!)
- ViewState’i ja tagasipostituse tugi puudub
- Laiendatav ja WEB 2.0 lubatud
Mudel, vaated ja kontroller
- Mudel: Mudelobjektid on rakenduse osad, mis rakendavad rakenduse andmedomeeni loogikat. Sageli otsivad mudeliobjektid ja salvestavad mudeli oleku andmebaasi. Näiteks võib tooteobjekt hankida teavet andmebaasist, töötada sellega ja seejärel kirjutada värskendatud teabe tagasi SQL Serveri tabelisse Tooted.
- Vaated: vaated on komponendid, mis kuvavad rakenduse kasutajaliidest (UI). Tavaliselt luuakse see kasutajaliides mudeli andmete põhjal. Näiteks võib tuua tootetabeli redigeerimisvaate, mis kuvab tooteobjekti praegusel olekul põhinevad tekstikastid, ripploendid ja märkeruudud.
- Kontroller: kontrollerid on komponendid, mis tegelevad kasutaja interaktsiooniga, töötavad mudeliga ja lõpuks valivad renderdamiseks kasutajaliidese kuvava vaate. MVC rakenduses kuvab vaade ainult teavet; kontroller käsitleb ja reageerib kasutaja sisendile ja suhtlusele. Näiteks töötleb kontroller päringustringi väärtusi ja edastab need väärtused mudelile, mis omakorda esitab väärtusi kasutades andmebaasi päringu.
ASP.NET MVC kõrgetasemeline lehe elutsükkel?
ASP.NET MVC madala taseme lehe elutsükkel?
MVC2.0 uued funktsioonid
1 malli abilist:
Mallidega abistajad aitavad meil redigeerimiseks ja kuvamiseks HTML-elemente automaatselt andmetüüpidega seostada.
System.DateTime
Näiteks kui vaates kuvatakse tüüpi andmeid, saab kuupäevavalija kasutajaliidese elemendi automaatselt renderdada.
See sarnaneb väljamallide tööga ASP.NET Dynamic Datas.
2 ala:
Valdkondade kasutamine Suure veebirakenduse keerukuse haldamiseks saame korraldada suure projekti mitmeks väiksemaks osaks.
Iga jaotis ("ala") esindab tavaliselt suure veebisaidi eraldi jaotist ja seda kasutatakse seotud kontrollerite ja vaadete komplektide rühmitamiseks.
Nt
Areas
Admin
Controllers
Models
Views
Iniala Claims
Controllers
Models
Views
3 Asünkroonsete kontrollerite tugi:
ASP.NET MVC2 võimaldab kontrolleritel taotlusi asünkroonselt töödelda.
See võib suurendada jõudlust, lubades sageli blokeerimistoiminguid (nt võrgupäringuid) kutsuvatel serveritel helistada mitteblokeerivatele kolleegidele.
DefaultValueAttribute
4 Action-meetodi parameetrite tugi :
Klass System.ComponentModel.DefaultValueAttribute
võimaldab anda toimingumeetodi argumendiparameetri vaikeväärtuse.
Oletame näiteks, et on määratletud järgmine vaikemarsruut:
{controller}/{action}/{id}
Samuti eeldage, et on määratletud järgmine kontroller ja tegevusmeetod:
public class ArticleController
{
public ActionResult View(int id, [DefaultValue(1)]int page)
{
}
}
Ükskõik milline järgmistest päringu URL-idest kutsub esile eelmises näites määratletud vaate toimingumeetodi.
- /Artikkel/Vaade/123
- /Article/View/123?page=1 (sama, mis eelmine taotlus)
- /Article/View/123?page=2
5 Tugi binaarandmete sidumiseks mudelisidejatega:
Abimehel on kaks uut ülekoormust, Html.Hidden
mis kodeerivad binaarväärtusi base-64 kodeeritud stringidena:
public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
DataAnnotations
6 Atribuutide tugi :
Kasutades mudeliga sidumisel sisendi kinnitamiseks atribuute RangeAttribute
, RequiredAttribute
, StringLengthAttribute
ja RegexAttribute
validation (määratletud nimeruumis).System.ComponentModel.DataAnnotations
using System.ComponentModel.DataAnnotations;
namespace MvcTmpHlprs
{
[MetadataType(typeof(ProductMD))]
public partial class Product
{
public class ProductMD
{
public object SellStartDate { get; set; }
[UIHint("rbDate")]
public object SellEndDate { get; set; }
[DataType(DataType.Date)]
public object DiscontinuedDate { get; set; }
[ScaffoldColumn(false)]
public object ModifiedDate { get; set; }
[ScaffoldColumn(false)]
public object rowguid { get; set; }
[ScaffoldColumn(false)]
public object ThumbnailPhotoFileName { get; set; }
}
}
}
7 mudelivalidaatori pakkujat:
Mudeli valideerimise pakkuja klass esindab abstraktsiooni, mis pakub mudelile valideerimisloogikat.
System.ComponentModel.DataAnnotations
ASP.NET MVC sisaldab vaikepakkujat, mis põhineb nimeruumis sisalduvatel valideerimisatribuutidel .
8 Kliendipoolne valideerimine:
Mudeli-validaatori pakkujaklass avaldab brauserile valideerimise metaandmed JSON-i jadaandmetena, mida saab kasutada kliendipoolses valideerimise teegis.
ASP.NET MVC 2 sisaldab kliendi valideerimise teeki ja adapterit, mis toetab DataAnnotations
varem mainitud nimeruumi valideerimise atribuute.
9 Uus RequireHttpsAttribute
toimingufilter:
ASP.NET MVC 2 sisaldab uut RequireHttpsAttribute
klassi, mida saab rakendada tegevusmeetoditele ja kontrolleritele.
Vaikimisi suunab filter mitte-SSL-i (HTTP) päringu ümber SSL-i toega (HTTPS) ekvivalendile.
10 HTTP-meetodi tegusõna alistamine:
Kui loome veebisaidi REST-i arhitektuuristiili abil, kasutatakse HTTP-verbe selleks, et määrata, millist toimingut ressursi jaoks teha.
REST nõuab, et rakendused toetaksid kõiki levinud HTTP-verbe, sealhulgas GET
, PUT
, POST
, ja DELETE
.
ASP.NET MVC 2 sisaldab uusi atribuute, mida saame rakendada tegevusmeetoditele ja millel on kompaktne süntaks.
Need atribuudid võimaldavad ASP.NET MVC-l valida HTTP-verbil põhineva toimingumeetodi.
Näiteks POST
taotlus kutsub esile esimese toimingumeetodi ja PUT
päring teise toimingumeetodi.
[HttpPost]
public ActionResult Edit(int id)
[HttpPut]
public ActionResult Edit(int id, Tag tag)
ASP.NET MVC varasemates versioonides nõudsid need toimingumeetodid üksikasjalikumat süntaksit, nagu on näidatud järgmises näites:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id)
[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Edit(int id, Tag tag)
Kuna brauserid toetavad ainult GET
ja POST
HTTP-verbe, ei ole võimalik postitada toimingule, mis nõuab teistsugust tegusõna. Seega ei ole võimalik kõiki RESTful
taotlusi algselt toetada.
RESTful
Päringute toetamiseks POST
toimingute ajal tutvustab ASP.NET MVC 2 aga uut HttpMethodOverride
HTML-abimeetodit.
See meetod renderdab peidetud sisendelemendi, mis paneb vormi tõhusalt emuleerima mis tahes HTTP-meetodit.
Näiteks HttpMethodOverride
HTML-i abistaja meetodit kasutades saame kuvada vormi esitamise, mis on a PUT
või DELETE
päring.
Kasutaja käitumine HttpMethodOverride
mõjutab järgmisi atribuute:
HttpPostAttribute
HttpPutAttribute
HttpGetAttribute
HttpDeleteAttribute
AcceptVerbsAttribute
11 uut HiddenInputAttribute
klassi abistajate jaoks:
Saame rakendada uut HiddenInputAttribute
atribuuti mudeli atribuudile, et näidata, kas mudeli kuvamisel redaktori mallis tuleks renderdada peidetud sisendelement (atribuut määrab kaudse UIHint
väärtuse HiddenInput
).
Atribuudi atribuut DisplayValue
võimaldab meil määrata, kas väärtust kuvatakse redaktori- ja kuvarežiimis.
Kui DisplayValue
väärtuseks on määratud Väär, ei kuvata midagi, isegi mitte HTML-i märgistust, mis tavaliselt välja ümbritseb.
Vaikeväärtus DisplayValue
on tõene.
Võime kasutada HiddenInputAttribute
atribuuti järgmistel juhtudel:
- Kui vaade võimaldab kasutajatel muuta objekti ID-d ja on vaja kuvada väärtust ja esitada peidetud sisendelement, mis sisaldab vana ID-d, et see saaks kontrollerile tagasi edastada.
- Kui vaade võimaldab kasutajatel muuta binaarset atribuuti, mida ei tohiks kunagi kuvada, näiteks ajatempli atribuuti.
Sel juhul väärtust ja ümbritsevat HTML-i märgistust (nt silti ja väärtust) ei kuvata.
Nt:
public class ProductViewModel
{
[HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)]
public int Id { get; set; }
public string Name { get; set; }
[HiddenInput(DisplayValue=false)]
public byte[] TimeStamp { get; set; }
}
12 Html.ValidationSummary
abimeetodit võib kuvada mudelitaseme vigu:
Selle asemel, et kuvada alati kõiki valideerimisvigu, on Html.ValidationSummary
abimeetodil uus võimalus kuvada ainult mudelitaseme vead.
See võimaldab kuvada mudelitaseme vead valideerimise kokkuvõttes ja väljapõhised vead kuvada iga välja kõrval.
13 Visual Studio T4 mallid loovad koodi, mis on spetsiifiline .NET Frameworki sihtversioonile:
ASP.NET MVC T4 hosti T4-failidele on saadaval uus atribuut, mis määrab rakenduse kasutatava .NET Frameworki versiooni.
See võimaldab T4 mallidel luua koodi ja märgistust, mis on spetsiifiline .NET Frameworki versioonile.
Visual Studio 2008-s on väärtus alati .NET 3.5. Visual Studio 2010 puhul on väärtus .NET 3.5 või .NET4.
14 API täiustust:
CreateActionInvoker
Kontrolleri klassis on lisatud kaitstud virtuaalne meetod.
Seda meetodit käivitab kontrolleri ActionInvoker
atribuut ja see võimaldab kutsuja laisalt käivitamist, kui ühtegi kutsujat pole juba määratud.