Suunnittelukuviot – MVC-kuvioita aloittelijoille

1

Se selittää, mikä on MVC Pattern ja mikä on ASP.NET MVC Framework, miten se toimii. Selittää myös ASP.NET MVC -sivun elinkaaren ja ASP.NET MVC:n ominaisuudet versiotietoisesti.

Näytteet sisälsivät vaiheita, jotka auttavat aloittelijoita ymmärtämään helposti ja hallitsemaan ASP.NET MVC:tä.

Kuten me kaikki tiedämme, monet suunnittelumallit ja niiden käyttö liiketoimintakomponenttien ja -palveluiden toteuttamisessa sovelluksissamme, mutta silti kohtaamme ongelmia/haasteita sovelluksiemme kanssa. Myös liiketoiminnan tarpeet ja prioriteetit muuttuvat päivä päivältä. Jos tarkkailemme tarkasti useita ongelmia, vikoja ja haasteita, joita kohtaamme käyttöliittymä- ja esitystasoilla. Vaikka jotkin viat liittyvät liiketoimintalogiikkaan ja liiketoimintasääntöihin, saatamme joutua korjaamaan ne käyttöliittymä- ja esitystasoissa, koska saatamme integroida liiketoimintalogiikan tiukasti käyttöliittymään ja esitystasoihin. Syynä tähän on se, että emme ole keskittyneet oikean suunnittelumallin toteuttamiseen sovelluksissamme. Käydään läpi vaihe vaiheelta ja ymmärrämme, kuinka esitysmallia voidaan toteuttaa ja käyttää sovelluksissamme.

Ongelmailmoitus:
  1. Sovelluksessa käytetään jo erilaisia ​​malleja, mutta sovelluksen ylläpitäminen on silti vaikeaa.
  2. VS Testin, NUnitin, MBUnitin jne. käyttö liiketoimintalogiikkakerroksen testaamiseen, mutta sovelluksessa on silti joitain vikoja, koska esityskerrokseen liittyy liiketoimintalogiikka.
  3. Sovelluksessa käytetty esityskerrosta, liiketoimintalogiikkakerrosta, tiedonkäyttökerrosta, mutta silti joskus on kirjoitettava redundanttia koodia esityskerrokseen kuluttaakseen tai kutsuakseen muita moduuleja tai muita käyttötapauksia.
  4. Integraatiovirheitä syntyy, kun teemme joitain muutoksia integroituihin moduuleihin.
  5. Vikojen korjaaminen ja parannukset vievät enemmän aikaa esitystason logiikan ja sen integraatioriippuvuuksien analysointiin ja aiheuttaen uusia vikoja.
  6. ASP.NET MVC:tä ei voi valita, koska käyttöliittymä on monimutkainen rakentaa.
Ongelman perimmäinen syy:

Esitystasolla

  1. Sivu tai lomake sisältää säätimiä, jotka näyttävät sovellusalueen tiedot. Käyttäjä voi muokata tietoja ja lähettää muutokset. Sivu hakee verkkotunnuksen tiedot, käsittelee käyttäjätapahtumia, muuttaa sivun muita ohjausobjekteja tapahtumien perusteella ja lähettää muuttuneet verkkotunnuksen tiedot. Näitä toimintoja suorittavan koodin sisällyttäminen Web-sivulle Lisäksi on vaikeaa jakaa koodia samaa toimintaa vaativien Web-sivujen välillä. luokka monimutkainen, vaikea ylläpitää ja vaikea testata.
  2. UI Layer, UI Logic, Presentation Logic, Business Logic ovat tiiviisti kytkettyjä.
  3. Esityskerros huolehtii moduulien tai käyttötapausten integroinnista.
Ratkaisu:
  1. Valitse paras Presentation Layer Pattern erottamaan käyttöliittymätaso, käyttöliittymälogiikka ja esityslogiikka sekä liiketoimintalogiikka erillisiksi tasoiksi, jotta koodia on helpompi ymmärtää ja ylläpitää.
  2. Ota löysä kytkentä käyttöön moduulien tai käyttötapausten kehittämisen aikana.
  3. Maksimoi koodi, joka voidaan testata automaatiolla. (Näkymiä on vaikea testata.)
  4. Jaa koodia samaa toimintaa edellyttävien sivujen välillä.
  5. Erottele visuaalisen näytön ja tapahtumankäsittelykäyttäytymisen vastuut eri luokkiin, jotka on nimetty näkymäksi ja esittäjäksi tai ohjaimeksi tai ViewModeliksi.
Esitysmallin käytön edut:
  1. Modulaarisuus
  2. Testilähtöinen lähestymistapa – maksimoi koodi, joka voidaan testata automaatiolla
  3. Huolien erottelu
  4. Koodin jakaminen sivujen ja lomakkeiden välillä
  5. Helppo huoltaa

Mitä esittelykerrosmalleja on saatavilla?

MVC (Model View Controller)

MVP (Model View Presenter) tai (Model Passive View, Supervisor Controller)

MVVM (mallinäkymän näkymämalli)

MVC vs MVP vs MVVM:
  1. Malli ja näkymä edustavat samaa kaikissa yllä olevissa kolmessa mallissa?

    Joo

  2. Onko ohjaimen, esittäjän ja ViewModelin tarkoitus sama kaikissa edellä mainituissa kolmessa mallissa?

    Joo

  3. Onko mallin, näkymän ohjaimella, esittelijän ja ViewModelin tiedonsiirto ja kulku sama?

    Ei, siksi nämä 3 mallia ovat olemassa.

  4. Korvaavatko nämä mallit PL:n (esityskerros), BLL:n (Business Logic Layer) ja DAL:n (Data Access Layer)

    Ei, nämä mallit ovat käyttöliittymän ja käyttöliittymälogiikan erottamiseen esityslogiikasta ja mahdollistavat löysän kytkennän.

Valitse paras esityskerrosmalli:

MVP

  1. Sidonta tietokontekstin kautta ei ole mahdollista
  2. Monimutkainen käyttöliittymäsuunnittelu
  3. Paras Windows Formsille, ASP.NET Web Formsille ja Sharepoint-sovelluksille

MVC

  1. Paras ASP.NETille yksinkertaisella käyttöliittymällä
  2. Irrotettu malli (katso erotus kaikista muista tasoista)

Huomautus: Tässä en keskity MVC VM:ään (MVC ViewModel MVC3:sta) ja ASP.NET MVVM:ään riippuvuusinjektiolla.

MVVM

  1. Sidonta tietokontekstin kautta on mahdollista
  2. Yhdistetty malli
  3. Paras WPF- ja Silverlight-sovelluksiin
ASP.NET Web Forms vs ASP.NET MVC:

ASP.NET-verkkolomakkeet

  1. RAD
  2. Helpompi kehitys
  3. Rich hallitsee ekosysteemiä
  4. Tuttu kehityslähestymistapa Windows Forms -kehitykseen
  5. Ei ViewStateja ei takaisinlähetystukea

ASP.NET MVC

  1. Puhdas huolenaiheiden erottelu (SoC)
  2. Täysi merkintähallinta
  3. Ota TDD (testilähtöinen kehitys) käyttöön
  4. Ota käyttöön ja tekee helpoksi LEPOA
  5. Helpompi asiakaspuolen integrointi (Javascript)
  6. Multi View Engine (tämä on todella siistiä!)
  7. Ei ViewState- ja ei takaisinlähetystukea
  8. Laajennettavissa ja WEB 2.0 käytössä

Malli, näkymät ja ohjain

  • Malli: Malliobjektit ovat sovelluksen osia, jotka toteuttavat sovelluksen tietoalueen logiikan. Usein malliobjektit hakevat ja tallentavat mallin tilan tietokantaan. Tuote-objekti voi esimerkiksi hakea tietoja tietokannasta, käyttää sitä ja kirjoittaa sitten päivitetyt tiedot takaisin Products-taulukkoon SQL Serverissä.
  • Näkymät: Näkymät ovat osia, jotka näyttävät sovelluksen käyttöliittymän. Tyypillisesti tämä käyttöliittymä luodaan mallitiedoista. Esimerkkinä voisi olla Tuotteet-taulukon muokkausnäkymä, joka näyttää tekstilaatikot, avattavat luettelot ja valintaruudut Tuotteet-objektin nykyisen tilan perusteella.
  • Ohjain: Ohjaimet ovat komponentteja, jotka käsittelevät käyttäjän vuorovaikutusta, toimivat mallin kanssa ja valitsevat lopulta hahmonnettavan näkymän, jossa näkyy käyttöliittymä. MVC-sovelluksessa näkymä näyttää vain tietoja; ohjain käsittelee ja vastaa käyttäjän syötteisiin ja vuorovaikutukseen. Esimerkiksi ohjain käsittelee kyselymerkkijonoarvoja ja välittää nämä arvot mallille, joka puolestaan ​​tekee kyselyjä tietokannasta käyttämällä arvoja.
ASP.NET MVC korkean tason sivun elinkaari?
ASP.NET MVC matalan tason sivun elinkaari?

MVC2.0 uusia ominaisuuksia

1 malliapua:

Template Helpers auttaa meitä yhdistämään automaattisesti HTML-elementtejä muokkausta ja näyttöä varten tietotyyppeihin.

Esimerkiksi kun tyyppistä dataa System.DateTimenäytetään näkymässä, päivämäärävalitsin käyttöliittymäelementti voidaan hahmontaa automaattisesti.

Tämä on samanlainen kuin kenttämallien toimintatapa ASP.NET Dynamic Datassa.

2 aluetta:

Alueiden käyttö Voimme järjestää suuren projektin useisiin pienempiin osiin hallitaksemme suuren verkkosovelluksen monimutkaisuutta.

Jokainen osa ("alue") edustaa tyypillisesti suuren Web-sivuston erillistä osaa, ja sitä käytetään ryhmittelemään toisiinsa liittyviä ohjaimia ja näkymiä.

Esim

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Tuki asynkronisille ohjaimille:

ASP.NET MVC2:n avulla ohjaimet voivat käsitellä pyyntöjä asynkronisesti.

Tämä voi johtaa suorituskyvyn paranemiseen sallimalla palvelimet, jotka kutsuvat usein estotoimintoja (kuten verkkopyyntöjä), kutsua sen sijaan estämättömiä vastineita.

4 Tuki DefaultValueAttributein Action-Method -parametreille:

Luokka System.ComponentModel.DefaultValueAttributesallii oletusarvon syöttämisen toimintamenetelmän argumenttiparametrille.

Oletetaan esimerkiksi, että seuraava oletusreitti on määritetty:

{controller}/{action}/{id}

Oletetaan myös, että seuraava ohjain ja toimintatapa on määritelty:

public class ArticleController
{
  public ActionResult View(int id, [DefaultValue(1)]int page)
  {
  }
}

Mikä tahansa seuraavista pyyntö-URL-osoitteista käynnistää edellisessä esimerkissä määritellyn Näytä-toimintomenetelmän.

  • /Artikkeli/Näytä/123
  • /Article/View/123?page=1 (Ihan sama kuin edellinen pyyntö)
  • /Article/View/123?page=2
5 Tuki binääritietojen sitomiselle mallisidosten avulla:

Apuohjelmassa on kaksi uutta ylikuormitusta Html.Hidden, jotka koodaavat binääriarvot base-64-koodatuiksi merkkijonoiksi:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
6 Tuki attribuuteille DataAnnotations:

Käyttämällä RangeAttribute, RequiredAttribute, StringLengthAttribute, ja RegexAttributevalidointiattribuutteja (määritelty nimiavaruudessa System.ComponentModel.DataAnnotations), kun sitoudumme malliin syötteen vahvistuksen aikaansaamiseksi.

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 mallinvalidaattorin tarjoajaa:

Mallin validoinnin tarjoajaluokka edustaa abstraktiota, joka tarjoaa mallille validointilogiikan.

ASP.NET MVC sisältää oletuspalveluntarjoajan, joka perustuu nimiavaruuteen sisältyviin vahvistusmääritteisiin System.ComponentModel.DataAnnotations.

8 Asiakaspuolen vahvistus:

Mallinvalidaattorin tarjoajaluokka paljastaa vahvistuksen metatiedot selaimelle JSON-sarjamuotoisten tietojen muodossa, joita asiakaspuolen vahvistuskirjasto voi käyttää.

ASP.NET MVC 2 sisältää asiakkaan vahvistuskirjaston ja sovittimen, joka tukee DataAnnotationsaiemmin mainittuja nimitilan vahvistusmääritteitä.

9 Uusi RequireHttpsAttributetoimintosuodatin:

ASP.NET MVC 2 sisältää uuden RequireHttpsAttributeluokan, jota voidaan soveltaa toimintamenetelmiin ja ohjaimiin.

Oletusarvoisesti suodatin uudelleenohjaa ei-SSL- (HTTP) pyynnön SSL-yhteensopivaan (HTTPS) -vastaavaan.

10 HTTP-menetelmäverbin ohittaminen:

Kun rakennamme verkkosivustoa käyttämällä REST-arkkitehtuurityyliä, HTTP-verbejä käytetään määrittämään, mikä toiminto suoritetaan resurssille.

REST edellyttää, että sovellukset tukevat kaikkia yleisiä HTTP-verbejä, mukaan lukien GET, PUT, POST, ja DELETE.

ASP.NET MVC 2 sisältää uusia attribuutteja, joita voimme soveltaa toimintamenetelmiin ja joissa on kompakti syntaksi.

Näiden määritteiden avulla ASP.NET MVC voi valita toimintomenetelmän HTTP-verbin perusteella.

Esimerkiksi POSTpyyntö kutsuu ensimmäistä toimintomenetelmää ja PUTpyyntö toista toimintomenetelmää.

[HttpPost]
 public ActionResult Edit(int id)
  
[HttpPut]
 public ActionResult Edit(int id, Tag tag)

Aiemmissa ASP.NET MVC:n versioissa nämä toimintatavat vaativat monisanaisemman syntaksin, kuten seuraavassa esimerkissä näkyy:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id)
 
[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Edit(int id, Tag tag)

Koska selaimet tukevat vain GETja POSTHTTP-verbejä, ei ole mahdollista lähettää toimintoon, joka vaatii eri verbiä. Näin ollen kaikkia pyyntöjä ei ole mahdollista tukea natiivisti RESTful.

Kuitenkin tukeakseen RESTfulpyyntöjä POSTtoiminnan aikana ASP.NET MVC 2 esittelee uuden HttpMethodOverrideHTML-apumenetelmän.

Tämä menetelmä tekee piilotetun syöttöelementin, joka saa lomakkeen emuloimaan tehokkaasti mitä tahansa HTTP-menetelmää.

Esimerkiksi käyttämällä HttpMethodOverrideHTML-apumenetelmää voimme saada lomakkeen lähetyksen näkyviin joko a PUTtai DELETEpyyntönä.

Käyttäytyminen HttpMethodOverridevaikuttaa seuraaviin ominaisuuksiin:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 uutta HiddenInputAttributeluokkaa malliauttajille:

Voimme soveltaa uutta HiddenInputAttributeattribuuttia mallin ominaisuuteen osoittamaan, tuleeko piilotettu syöttöelementti hahmontaa, kun malli näytetään editorimallissa (attribuutti asettaa implisiittisen UIHintarvon HiddenInput).

Attribuutin DisplayValueominaisuuden avulla voimme määrittää, näytetäänkö arvo muokkaus- ja näyttötiloissa.

Kun DisplayValuearvoksi on asetettu epätosi, mitään ei näytetä, ei edes kenttää tavallisesti ympäröivää HTML-merkintää.

Oletusarvo on DisplayValuetosi.

Saatamme käyttää HiddenInputAttributeattribuuttia seuraavissa tilanteissa:

  • Kun näkymässä käyttäjät voivat muokata objektin ID:tä ja on tarpeen näyttää arvo sekä tarjota piilotettu syöttöelementti, joka sisältää vanhan tunnuksen, jotta se voidaan välittää takaisin ohjaimelle.
  • Kun näkymässä käyttäjät voivat muokata binaariomaisuutta, jota ei koskaan pitäisi näyttää, kuten aikaleima-ominaisuutta.

Siinä tapauksessa arvoa ja ympäröivää HTML-merkintää (kuten tunnistetta ja arvoa) ei näytetä.

Esim:

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.ValidationSummaryapumenetelmää voi näyttää mallitason virheitä:

Sen sijaan, että aina näyttäisi kaikki vahvistusvirheet, apumenetelmässä Html.ValidationSummaryon uusi vaihtoehto näyttää vain mallitason virheet.

Tämä mahdollistaa mallitason virheiden näyttämisen validointiyhteenvedossa ja kenttäkohtaisten virheiden näyttämisen kunkin kentän vieressä.

13 Visual Studion T4-mallit Luo .NET Frameworkin kohdeversiolle ominaista koodia:

T4-tiedostoille on saatavilla ASP.NET MVC T4 -isännästä uusi ominaisuus, joka määrittää sovelluksen käyttämän .NET Framework -version.

Tämä mahdollistaa T4-mallien luomisen .NET Frameworkin versiolle ominaisen koodin ja merkinnän.

Visual Studio 2008:ssa arvo on aina .NET 3.5. Visual Studio 2010:ssä arvo on joko .NET 3.5 tai .NET4.

14 API-parannusta:

Lisätty suojattu virtuaalinen CreateActionInvokermenetelmä Controller-luokkaan.

Ohjaimen ominaisuus kutsuu tämän menetelmän ActionInvoker, ja se mahdollistaa kutsujan laiskan ilmentämisen, jos kutsuja ei ole jo asetettu.

: 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