Disainimustrid – MVC mustrite näidised algajatele

2

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:
  1. Juba kasutate rakenduses erinevaid mustreid, kuid rakenduse säilitamine on endiselt keeruline.
  2. VS Testi, NUniti, MBUniti jne kasutamine äriloogika kihi testimiseks, kuid rakenduses on siiski mõned vead, kuna esitluskihiga seotud äriloogika.
  3. 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.
  4. Integreeritud moodulites muudatuste tegemisel ilmnevad integratsioonidefektid.
  5. Defektide parandamine ja täiustused võtavad rohkem aega esitlustasandi loogika ja selle integratsioonisõltuvuste analüüsimiseks ning uute defektide ilmnemiseks.
  6. ASP.NET MVC-d ei saa valida, kuna kasutajaliidest on keeruline ehitada.
Probleemi algpõhjus:

Esitluskihis

  1. 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.
  2. UI kiht, kasutajaliidese loogika, esitlusloogika ja äriloogika on omavahel tihedalt seotud.
  3. Esitluskiht hoolitseb moodulite või kasutusjuhtude integreerimise eest.
Lahendus:
  1. Valige parim esitluskihi muster, et eraldada kasutajaliidese kiht, kasutajaliidese loogika ja esitlusloogika ning äriloogika eraldi kihtidena, et koodi oleks lihtsam mõista ja hooldada.
  2. Lubage lahtine sidumine moodulite väljatöötamisel või mis tahes kasutusjuhtudel.
  3. Maksimeerige automaatika abil testitavat koodi. (Vaadet on raske testida.)
  4. Jagage koodi lehtede vahel, mis nõuavad sama käitumist.
  5. 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:
  1. Modulaarsus
  2. Testipõhine lähenemine – maksimeerige automaatika abil testitavat koodi
  3. Murede eraldamine
  4. Koodi jagamine lehtede ja vormide vahel
  5. 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:
  1. Kas mudel ja vaade tähistavad kõigis ülaltoodud kolmes mustris sama?

    Jah

  2. Kas kontrolleri, esitleja ja vaatemudeli eesmärk on kõigi ülaltoodud kolme mustri puhul sama?

    Jah

  3. Kas mudeli, vaate kontrolleriga, esitleja ja vaatemudeli suhtlus ja voog on samad?

    Ei, see on põhjus, miks need 3 mustrit eksisteerivad.

  4. 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

  1. Andmekonteksti kaudu sidumine pole võimalik
  2. Keeruline kasutajaliidese disain
  3. Parim Windowsi vormide, ASP.NET veebivormide ja Sharepointi rakenduste jaoks

MVC

  1. Parim lihtsa kasutajaliidese ASP.NET jaoks
  2. Ü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

  1. Võimalik on sidumine andmekonteksti kaudu
  2. Ühendatud mudel
  3. Parim WPF-i ja Silverlighti rakenduste jaoks
ASP.NET Web Forms vs ASP.NET MVC:

ASP.NETi veebivormid

  1. RAD
  2. Lihtsam areng
  3. Rikas kontrollib ökosüsteemi
  4. Tuntud kui Windows Formsi arenduse arendusviis
  5. Ei ViewStateja puudub tagasipostituse tugi

ASP.NET MVC

  1. Puhas mure eraldamine (SoC)
  2. Täielik märgistuse kontroll
  3. Luba TDD (testipõhine arendus)
  4. Lubage ja muudab hõlpsaks PUHASTAMISE
  5. Lihtsam kliendipoolne integreerimine (Javascript)
  6. Multi View Engine (see on tõesti lahe!)
  7. ViewState’i ja tagasipostituse tugi puudub
  8. 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.DateTimeNä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.

DefaultValueAttribute4 Action-meetodi parameetrite tugi :

Klass System.ComponentModel.DefaultValueAttributevõ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.Hiddenmis 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);
DataAnnotations6 Atribuutide tugi :

Kasutades mudeliga sidumisel sisendi kinnitamiseks atribuute RangeAttribute, RequiredAttribute, StringLengthAttributeja RegexAttributevalidation (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.DataAnnotationsASP.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 DataAnnotationsvarem mainitud nimeruumi valideerimise atribuute.

9 Uus RequireHttpsAttributetoimingufilter:

ASP.NET MVC 2 sisaldab uut RequireHttpsAttributeklassi, 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 POSTtaotlus kutsub esile esimese toimingumeetodi ja PUTpä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 GETja POSTHTTP-verbe, ei ole võimalik postitada toimingule, mis nõuab teistsugust tegusõna. Seega ei ole võimalik kõiki RESTfultaotlusi algselt toetada.

RESTfulPäringute toetamiseks POSTtoimingute ajal tutvustab ASP.NET MVC 2 aga uut HttpMethodOverrideHTML-abimeetodit.

See meetod renderdab peidetud sisendelemendi, mis paneb vormi tõhusalt emuleerima mis tahes HTTP-meetodit.

Näiteks HttpMethodOverrideHTML-i abistaja meetodit kasutades saame kuvada vormi esitamise, mis on a PUTvõi DELETEpäring.

Kasutaja käitumine HttpMethodOverridemõjutab järgmisi atribuute:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 uut HiddenInputAttributeklassi abistajate jaoks:

Saame rakendada uut HiddenInputAttributeatribuuti mudeli atribuudile, et näidata, kas mudeli kuvamisel redaktori mallis tuleks renderdada peidetud sisendelement (atribuut määrab kaudse UIHintväärtuse HiddenInput).

Atribuudi atribuut DisplayValuevõimaldab meil määrata, kas väärtust kuvatakse redaktori- ja kuvarežiimis.

Kui DisplayValueväärtuseks on määratud Väär, ei kuvata midagi, isegi mitte HTML-i märgistust, mis tavaliselt välja ümbritseb.

Vaikeväärtus DisplayValueon tõene.

Võime kasutada HiddenInputAttributeatribuuti 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.ValidationSummaryabimeetodit võib kuvada mudelitaseme vigu:

Selle asemel, et kuvada alati kõiki valideerimisvigu, on Html.ValidationSummaryabimeetodil 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:

CreateActionInvokerKontrolleri klassis on lisatud kaitstud virtuaalne meetod.

Seda meetodit käivitab kontrolleri ActionInvokeratribuut ja see võimaldab kutsuja laisalt käivitamist, kui ühtegi kutsujat pole juba määratud.

: instantshift.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More