Modelli di progettazione – Esempi di modelli MVC per principianti

2

Spiega cos'è MVC Pattern e cos'è ASP.NET MVC Framework come funziona. Spiega anche il ciclo di vita della pagina ASP.NET MVC e le funzionalità di ASP.NET MVC per quanto riguarda la versione.

Gli esempi hanno fornito passaggi saggi per aiutare i principianti a comprendere facilmente e diventare esperti in ASP.NET MVC.

Come tutti sappiamo, molti modelli di progettazione e il loro utilizzo nell'implementazione di componenti e servizi aziendali nelle nostre applicazioni, ma dovremo comunque affrontare problemi/sfide con le nostre applicazioni. Anche le esigenze e le priorità aziendali di giorno in giorno cambieranno. Se osserviamo da vicino una serie di problemi, difetti e sfide che stiamo affrontando è nell'interfaccia utente e nei livelli di presentazione. Sebbene alcuni difetti siano correlati alla logica aziendale e alle regole aziendali, potrebbe essere necessario correggerli nell'interfaccia utente e nei livelli di presentazione poiché potremmo integrare strettamente la logica aziendale nell'interfaccia utente e nei livelli di presentazione. La ragione di ciò è che non ci siamo concentrati sull'implementazione del modello di progettazione corretto nelle nostre applicazioni. Esaminiamo passo dopo passo e comprendiamo come implementare e utilizzare il modello di presentazione nelle nostre applicazioni.

Dichiarazione problema:
  1. Utilizzando già modelli diversi nell'applicazione, ma mantenere l'applicazione è ancora difficile.
  2. Utilizzo di VS Test, NUnit, MBUnit ecc. Per testare il livello di logica aziendale, ma esistono ancora alcuni difetti nell'applicazione come logica aziendale coinvolta nel livello di presentazione.
  3. Livello di presentazione utilizzato, livello di logica aziendale, livello di accesso ai dati nell'applicazione, ma a volte è ancora necessario scrivere codice ridondante nel livello di presentazione per consumare o chiamare altri moduli o altri casi d'uso.
  4. I difetti di integrazione vengono iniettati quando apportiamo alcune modifiche ai moduli integrati.
  5. La correzione dei difetti e i miglioramenti richiedono più tempo per analizzare la logica del livello di presentazione e le sue dipendenze di integrazione e causano l'apertura di nuovi difetti.
  6. ASP.NET MVC non può essere scelto poiché l'interfaccia utente è complessa da costruire.
Causa principale del problema:

Nel livello Presentazione,

  1. Una pagina o un modulo contiene controlli che visualizzano i dati del dominio dell'applicazione. Un utente può modificare i dati e inviare le modifiche. La pagina recupera i dati del dominio, gestisce gli eventi utente, altera altri controlli sulla pagina in risposta agli eventi e invia i dati del dominio modificati. Includere il codice che esegue queste funzioni nella pagina Web Inoltre, è difficile condividere il codice tra pagine Web che richiedono lo stesso comportamento. la classe complessa, difficile da mantenere e difficile da testare.
  2. Il livello dell'interfaccia utente, la logica dell'interfaccia utente, la logica di presentazione e la logica aziendale sono strettamente collegati.
  3. Il livello di presentazione si occupa dell'integrazione di moduli o casi d'uso.
Soluzione:
  1. Scegli un miglior modello di livello di presentazione per separare il livello dell'interfaccia utente, la logica dell'interfaccia utente e la logica di presentazione e la logica aziendale come livelli separati per rendere il codice più facile da comprendere e mantenere.
  2. Abilita l'accoppiamento libero durante lo sviluppo di moduli o qualsiasi caso d'uso.
  3. Massimizza il codice che può essere testato con l'automazione. (Le visualizzazioni sono difficili da testare.)
  4. Condividi il codice tra le pagine che richiedono lo stesso comportamento.
  5. Separare le responsabilità per la visualizzazione visiva e il comportamento di gestione degli eventi in classi diverse denominate, rispettivamente, la vista e il presentatore o controller o ViewModel.
Vantaggi dell'utilizzo del modello di presentazione:
  1. Modularità
  2. Approccio basato sui test: massimizza il codice che può essere testato con l'automazione
  3. Separazione degli interessi
  4. Condivisione del codice tra pagine e form
  5. Facile da mantenere

Quali sono i modelli del livello di presentazione disponibili?

MVC (Controller vista modello)

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

MVVM (Model View ViewModel)

MVC vs MVP vs MVVM:
  1. Il modello e la vista rappresentano lo stesso in tutti i 3 modelli precedenti?

  2. Lo scopo di Controller, Presenter e ViewModel è lo stesso in tutti i 3 modelli precedenti?

  3. La comunicazione e il flusso di Model, View with Controller, Presenter e ViewModel sono gli stessi?

    No, questo è il motivo per cui esistono questi 3 modelli.

  4. Questi modelli sostituiscono PL (Presentation Layer), BLL (Business Logic Layer) e DAL (Data Access Layer)

    No, questi modelli servono a separare l'interfaccia utente e la logica dell'interfaccia utente dalla logica di presentazione e consentono l'accoppiamento libero.

Scegli il miglior modello di livello di presentazione:

MVP

  1. L'associazione tramite un contesto dati non è possibile
  2. Design dell'interfaccia utente complesso
  3. Ideale per Windows Form, Web Form ASP.NET e applicazioni Sharepoint

MVC

  1. Ideale per ASP.NET con interfaccia utente semplice
  2. Modello disconnesso (Visualizza la separazione da tutti gli altri livelli)

Nota: qui non mi sto concentrando su MVC VM (MVC ViewModel da MVC3) e ASP.NET MVVM con Dependency Injection.

MVVM

  1. È possibile l'associazione tramite un contesto dati
  2. Modello connesso
  3. Ideale per applicazioni WPF e Silverlight
ASP.NET Web Form vs ASP.NET MVC:

Moduli Web ASP.NET

  1. RAD
  2. Sviluppo più facile
  3. Ricco ecosistema di controlli
  4. Familiare come l'approccio di sviluppo allo sviluppo di Windows Forms
  5. No ViewStatee nessun supporto postback

ASP.NET MVC

  1. Separazione netta delle preoccupazioni (SoC)
  2. Controllo completo del markup
  3. Abilita TDD (sviluppo basato su test)
  4. Abilita e rende facilmente REST
  5. Integrazione lato client più semplice (Javascript)
  6. Multi View Engine (questo è davvero fantastico!)
  7. Nessun ViewState e nessun supporto postback
  8. Estensibile e WEB 2.0 abilitato

Modello, visualizzazioni e controller

  • Modello: gli oggetti del modello sono le parti dell'applicazione che implementano la logica per il dominio dei dati dell'applicazione. Spesso gli oggetti del modello recuperano e archiviano lo stato del modello in un database. Ad esempio, un oggetto Product potrebbe recuperare informazioni da un database, operare su di esso e quindi riscrivere le informazioni aggiornate in una tabella Products in SQL Server.
  • Viste: le viste sono i componenti che visualizzano l'interfaccia utente (UI) dell'applicazione. In genere, questa interfaccia utente viene creata dai dati del modello. Un esempio potrebbe essere una visualizzazione di modifica di una tabella Prodotti che visualizza caselle di testo, elenchi a discesa e caselle di controllo in base allo stato corrente di un oggetto Prodotti.
  • Controller: i controller sono i componenti che gestiscono l'interazione dell'utente, lavorano con il modello e infine selezionano una vista per il rendering che mostra l'interfaccia utente. In un'applicazione MVC, la vista mostra solo informazioni; il controller gestisce e risponde all'input e all'interazione dell'utente. Ad esempio, il controller gestisce i valori della stringa di query e passa questi valori al modello, che a sua volta interroga il database utilizzando i valori.
Ciclo di vita della pagina di alto livello ASP.NET MVC?
Ciclo di vita della pagina di basso livello ASP.NET MVC?

MVC2.0 Nuove funzionalità

1 helper basati su modelli:

Gli helper basati su modelli ci aiutano ad associare automaticamente gli elementi HTML per la modifica e la visualizzazione con i tipi di dati.

Ad esempio, quando i dati di tipo System.DateTimevengono visualizzati in una vista, è possibile eseguire automaticamente il rendering di un elemento dell'interfaccia utente di datepicker.

Questo è simile al funzionamento dei modelli di campo in ASP.NET Dynamic Data.

2 aree:

Utilizzo delle aree Possiamo organizzare un grande progetto in più sezioni più piccole per gestire la complessità di una grande applicazione Web.

Ciascuna sezione ("area") rappresenta in genere una sezione separata di un sito Web di grandi dimensioni e viene utilizzata per raggruppare insiemi correlati di controller e viste.

Per esempio

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Supporto per controller asincroni:

ASP.NET MVC2 consente ai controller di elaborare le richieste in modo asincrono.

Ciò può portare a miglioramenti delle prestazioni consentendo ai server che chiamano frequentemente operazioni di blocco (come le richieste di rete) di chiamare invece controparti non bloccanti.

4 Supporto per DefaultValueAttributei parametri del metodo di azione:

La System.ComponentModel.DefaultValueAttributeclasse consente di fornire un valore predefinito per il parametro dell'argomento a un metodo di azione.

Ad esempio, si supponga che sia definita la seguente route predefinita:

{controller}/{action}/{id}

Si supponga inoltre che siano definiti il ​​seguente controller e metodo di azione:

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

Uno qualsiasi dei seguenti URL di richiesta richiamerà il metodo di azione View definito nell'esempio precedente.

  • /Articolo/Visualizza/123
  • /Article/View/123?page=1 (Efficacemente uguale alla richiesta precedente)
  • /Articolo/Vista/123?page=2
5 Supporto per l'associazione di dati binari con raccoglitori di modelli:

Sono disponibili due nuovi overload dell'helper Html.Hiddenche codificano i valori binari come stringhe codificate in base 64:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
6 Supporto per DataAnnotationsgli attributi:

Utilizzo degli attributi RangeAttribute, RequiredAttribute, StringLengthAttributee RegexAttributevalidation (definiti nello System.ComponentModel.DataAnnotationsspazio dei nomi) quando ci colleghiamo a un modello per fornire la convalida dell'input.

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 fornitori di validatori di modelli:

La classe del provider di convalida del modello rappresenta un'astrazione che fornisce la logica di convalida per il modello.

ASP.NET MVC include un provider predefinito basato sugli attributi di convalida inclusi nello System.ComponentModel.DataAnnotationsspazio dei nomi.

8 Convalida lato client:

La classe del provider di validazione del modello espone i metadati di convalida al browser sotto forma di dati serializzati JSON che possono essere utilizzati da una libreria di convalida lato client.

ASP.NET MVC 2 include una libreria di convalida client e un adattatore che supporta gli DataAnnotationsattributi di convalida dello spazio dei nomi indicati in precedenza.

9 Nuovo RequireHttpsAttributefiltro azione:

ASP.NET MVC 2 include una nuova RequireHttpsAttributeclasse che può essere applicata a controller e metodi di azione.

Per impostazione predefinita, il filtro reindirizza una richiesta non SSL (HTTP) all'equivalente abilitato per SSL (HTTPS).

10 Sovrascrivere il verbo del metodo HTTP:

Quando costruiamo un sito Web utilizzando lo stile architettonico REST, i verbi HTTP vengono utilizzati per determinare quale azione eseguire per una risorsa.

REST richiede che le applicazioni supportino l'intera gamma di verbi HTTP comuni, inclusi GET, PUT, POSTe DELETE.

ASP.NET MVC 2 include nuovi attributi che possiamo applicare ai metodi di azione e che presentano una sintassi compatta.

Questi attributi consentono a ASP.NET MVC di selezionare un metodo di azione basato sul verbo HTTP.

Ad esempio, una POSTrichiesta chiamerà il primo metodo di azione e una PUTrichiesta chiamerà il secondo metodo di azione.

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

Nelle versioni precedenti di ASP.NET MVC, questi metodi di azione richiedevano una sintassi più dettagliata, come mostrato nell'esempio seguente:

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

Poiché i browser supportano solo i verbi GETe POSTHTTP, non è possibile eseguire il post su un'azione che richiede un verbo diverso. Pertanto non è possibile supportare nativamente tutte RESTfulle richieste.

Tuttavia, per supportare RESTfulle richieste durante POSTle operazioni, ASP.NET MVC 2 introduce un nuovo HttpMethodOverridemetodo helper HTML.

Questo metodo esegue il rendering di un elemento di input nascosto che fa sì che il modulo emuli efficacemente qualsiasi metodo HTTP.

Ad esempio, utilizzando il HttpMethodOverridemetodo HTML helper, possiamo fare in modo che l'invio di un modulo appaia come una PUTo DELETEuna richiesta.

Il comportamento di HttpMethodOverrideinfluenza i seguenti attributi:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 Nuova HiddenInputAttributeclasse per helper basati su modelli:

Possiamo applicare il nuovo HiddenInputAttributeattributo a una proprietà del modello per indicare se un elemento di input nascosto deve essere reso quando si visualizza il modello in un template dell'editor (l'attributo imposta un UIHintvalore implicito di HiddenInput).

La proprietà dell'attributo DisplayValueci consente di specificare se il valore viene visualizzato nelle modalità editor e display.

Quando DisplayValueè impostato su false, non viene visualizzato nulla, nemmeno il markup HTML che normalmente circonda un campo.

Il valore predefinito per DisplayValueè vero.

Potremmo utilizzare HiddenInputAttributel'attributo nei seguenti scenari:

  • Quando una vista consente agli utenti di modificare l'ID di un oggetto ed è necessario visualizzare il valore e fornire un elemento di input nascosto che contiene il vecchio ID in modo che possa essere restituito al controller.
  • Quando una visualizzazione consente agli utenti di modificare una proprietà binaria che non dovrebbe mai essere visualizzata, ad esempio una proprietà timestamp.

In tal caso, il valore e il markup HTML circostante (come l'etichetta e il valore) non vengono visualizzati.

Per esempio:

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.ValidationSummaryIl metodo helper può visualizzare errori a livello di modello:

Invece di visualizzare sempre tutti gli errori di convalida, il Html.ValidationSummarymetodo helper dispone di una nuova opzione per visualizzare solo gli errori a livello di modello.

Ciò consente di visualizzare gli errori a livello di modello nel riepilogo della convalida e gli errori specifici del campo accanto a ciascun campo.

13 modelli T4 in Visual Studio generano codice specifico per la versione di destinazione di .NET Framework:

Una nuova proprietà è disponibile per i file T4 dall'host ASP.NET MVC T4 che specifica la versione di .NET Framework usata dall'applicazione.

Ciò consente ai modelli T4 di generare codice e markup specifici per una versione di .NET Framework.

In Visual Studio 2008 il valore è sempre .NET 3.5. In Visual Studio 2010, il valore è .NET 3.5 o .NET4.

14 miglioramenti dell'API:

Aggiunto un CreateActionInvokermetodo virtuale protetto nella classe Controller.

Questo metodo viene richiamato dalla ActionInvokerproprietà di Controller e consente l'istanziazione lazy dell'invoker se non è già impostato alcun invoker.

Fonte di registrazione: 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