Patrones de diseño – Muestras de patrones MVC para principiantes

2

Explica qué es MVC Pattern y qué es ASP.NET MVC Framework y cómo funciona. También explica el ciclo de vida de la página ASP.NET MVC y las características de ASP.NET MVC en cuanto a la versión.

Las muestras proporcionaron pasos sabios para ayudar a los principiantes a comprender fácilmente y dominar ASP.NET MVC.

Como todos conocemos, muchos patrones de diseño y su uso en la implementación de componentes y servicios comerciales en nuestras aplicaciones, pero aun así enfrentaremos problemas/desafíos con nuestras aplicaciones. También día a día las necesidades y prioridades comerciales cambiarán. Si observamos de cerca una serie de problemas, defectos y desafíos a los que nos enfrentamos, es en las capas de interfaz de usuario y presentación. Aunque algunos defectos están relacionados con la lógica comercial y las reglas comerciales, es posible que debamos corregirlos en las capas de presentación y la interfaz de usuario, ya que podríamos integrar la lógica comercial en los niveles de presentación y la interfaz de usuario. La razón detrás de esto es que no nos hemos centrado en implementar el patrón de diseño correcto en nuestras aplicaciones. Veamos paso a paso y comprendamos cómo implementar y usar el patrón de presentación en nuestras aplicaciones.

Planteamiento del problema:
  1. Ya se utilizan diferentes patrones en la aplicación, pero aún es difícil mantener la aplicación.
  2. Usando VS Test, NUnit, MBUnit, etc. para probar la capa de lógica de negocios, pero aún existen algunos defectos en la aplicación como lógica de negocios involucrada en la capa de presentación.
  3. Se usó la capa de presentación, la capa de lógica de negocios, la capa de acceso a datos en la aplicación, pero a veces se necesita escribir código redundante en la capa de presentación para consumir o llamar a otros módulos u otros casos de uso.
  4. Los defectos de integración se inyectan cuando hacemos algunos cambios en los módulos integrados.
  5. La corrección de defectos y las mejoras están tomando más tiempo para analizar la lógica del nivel de presentación y sus dependencias de integración y provocando la apertura de nuevos defectos.
  6. No se puede elegir ASP.NET MVC porque la interfaz de usuario es compleja de construir.
Causa raíz del problema:

En la capa de presentación,

  1. Una página o formulario contiene controles que muestran datos del dominio de la aplicación. Un usuario puede modificar los datos y enviar los cambios. La página recupera los datos del dominio, maneja los eventos del usuario, modifica otros controles en la página en respuesta a los eventos y envía los datos del dominio modificados. Incluir el código que realiza estas funciones en la página web Además, es difícil compartir código entre páginas web que requieren el mismo comportamiento. la clase compleja, difícil de mantener y difícil de probar.
  2. La capa de interfaz de usuario, la lógica de interfaz de usuario, la lógica de presentación y la lógica empresarial están estrechamente acopladas.
  3. La capa de presentación se encarga de integrar módulos o casos de uso.
Solución:
  1. Elija el mejor patrón de capa de presentación para separar la capa de interfaz de usuario, la lógica de interfaz de usuario y la lógica de presentación y la lógica de negocios como capas separadas para que el código sea más fácil de entender y mantener.
  2. Habilite el acoplamiento flexible mientras desarrolla módulos o cualquier caso de uso.
  3. Maximice el código que se puede probar con la automatización. (Las vistas son difíciles de probar).
  4. Comparta código entre páginas que requieran el mismo comportamiento.
  5. Separe las responsabilidades de la visualización y el comportamiento del manejo de eventos en diferentes clases denominadas, respectivamente, la vista y el presentador o controlador o ViewModel.
Beneficios de usar el patrón de presentación:
  1. Modularidad
  2. Enfoque basado en pruebas: maximice el código que se puede probar con la automatización
  3. Separación de intereses
  4. Código compartido entre páginas y formularios
  5. Facil de mantener

¿Cuáles son los patrones de capa de presentación disponibles?

MVC (controlador de vista de modelo)

MVP (presentador de vista de modelo) o (vista pasiva de modelo, controlador de supervisor)

MVVM (Modelo Vista VistaModelo)

MVC contra MVP contra MVVM:
  1. ¿El modelo y la vista representan lo mismo en los 3 patrones anteriores?

  2. ¿El propósito del controlador, el presentador y el modelo de vista es el mismo en los 3 patrones anteriores?

  3. ¿La comunicación y el flujo de Model, View with Controller, Presenter y ViewModel son los mismos?

    No, esa es la razón por la que existen estos 3 patrones.

  4. ¿Estos patrones reemplazan a PL (capa de presentación), BLL (capa de lógica comercial) y DAL (capa de acceso a datos)?

    No, estos patrones son para separar la interfaz de usuario y la lógica de la interfaz de usuario de la lógica de presentación y permiten el acoplamiento flexible.

Elija el mejor patrón de capa de presentación:

jugador más valioso

  1. La vinculación a través de un contexto de datos no es posible
  2. Diseño de interfaz de usuario complejo
  3. Lo mejor para Windows Forms, ASP.NET Web Forms y Sharepoint Applications

MVC

  1. Mejor para ASP.NET con interfaz de usuario simple
  2. Modelo desconectado (ver la separación de todas las demás capas)

Nota: Aquí no me centro en MVC VM (MVC ViewModel de MVC3) y ASP.NET MVVM con inyección de dependencia.

MVVM

  1. La vinculación a través de un contexto de datos es posible
  2. Modelo conectado
  3. Mejor para aplicaciones WPF y Silverlight
Formularios web ASP.NET frente a ASP.NET MVC:

Formularios web ASP.NET

  1. RAD
  2. Desarrollo más fácil
  3. Rico ecosistema de controles
  4. Familiar como el enfoque de desarrollo para el desarrollo de Windows Forms
  5. Sin ViewStatey sin soporte de devolución de datos

ASP.NET MVC

  1. Separación limpia de preocupaciones (SoC)
  2. Control total de marcado
  3. Habilitar TDD (Desarrollo dirigido por pruebas)
  4. Habilita y hace REST fácilmente
  5. Integración más fácil del lado del cliente (Javascript)
  6. Multi View Engine (¡esto es realmente genial!)
  7. Sin ViewState y sin soporte de devolución de datos
  8. Extensible y WEB 2.0 Habilitado

Modelo, vistas y controlador

  • Modelo: los objetos del modelo son las partes de la aplicación que implementan la lógica para el dominio de datos de la aplicación. A menudo, los objetos del modelo recuperan y almacenan el estado del modelo en una base de datos. Por ejemplo, un objeto Producto podría recuperar información de una base de datos, operar en ella y luego volver a escribir información actualizada en una tabla Productos en SQL Server.
  • Vistas: las vistas son los componentes que muestran la interfaz de usuario (UI) de la aplicación. Normalmente, esta interfaz de usuario se crea a partir de los datos del modelo. Un ejemplo sería una vista de edición de una tabla de productos que muestra cuadros de texto, listas desplegables y casillas de verificación según el estado actual de un objeto de productos.
  • Controlador: los controladores son los componentes que manejan la interacción del usuario, trabajan con el modelo y, en última instancia, seleccionan una vista para renderizar que muestra la interfaz de usuario. En una aplicación MVC, la vista solo muestra información; el controlador maneja y responde a la entrada e interacción del usuario. Por ejemplo, el controlador maneja los valores de cadena de consulta y pasa estos valores al modelo, que a su vez consulta la base de datos utilizando los valores.
¿Ciclo de vida de página de alto nivel de ASP.NET MVC?
¿Ciclo de vida de página de bajo nivel de ASP.NET MVC?

Nuevas características de MVC2.0

1 ayudantes con plantilla:

Los asistentes con plantillas nos ayudan a asociar automáticamente elementos HTML para editarlos y mostrarlos con tipos de datos.

Por ejemplo, cuando System.DateTimese muestran datos de tipo en una vista, se puede representar automáticamente un elemento de interfaz de usuario selector de fecha.

Esto es similar a cómo funcionan las plantillas de campo en ASP.NET Dynamic Data.

2 Áreas:

Uso de áreas Podemos organizar un proyecto grande en varias secciones más pequeñas para administrar la complejidad de una aplicación web grande.

Cada sección ("área") normalmente representa una sección separada de un sitio web grande y se usa para agrupar conjuntos relacionados de controladores y vistas.

P.ej

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Compatibilidad con controladores asíncronos:

ASP.NET MVC2 permite que los controladores procesen las solicitudes de forma asíncrona.

Esto puede conducir a mejoras en el rendimiento al permitir que los servidores que llaman con frecuencia a operaciones de bloqueo (como solicitudes de red) llamen a sus homólogos que no bloquean.

4 Compatibilidad con DefaultValueAttributelos parámetros del método de acción:

La System.ComponentModel.DefaultValueAttributeclase permite proporcionar un valor predeterminado para el parámetro de argumento a un método de acción.

Por ejemplo, suponga que se define la siguiente ruta predeterminada:

{controller}/{action}/{id}

Suponga también que se define el siguiente controlador y método de acción:

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

Cualquiera de las siguientes URL de solicitud invocará el método de acción Ver que se define en el ejemplo anterior.

  • /Artículo/Ver/123
  • /Article/View/123?page=1 (Efectivamente igual que la solicitud anterior)
  • /Artículo/Ver/123?página=2
5 Soporte para vincular datos binarios con Model Binders:

Hay dos nuevas sobrecargas del Html.Hiddenayudante que codifican valores binarios como cadenas codificadas en 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 Soporte para DataAnnotationsatributos:

Usar los atributos de validación, , y (definidos en el RangeAttributeespacio RequiredAttributede StringLengthAttributenombres) cuando nos vinculamos a un modelo para proporcionar validación de entrada.RegexAttribute``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 proveedores de validadores de modelos:

La clase de proveedor de validación de modelos representa una abstracción que proporciona lógica de validación para el modelo.

ASP.NET MVC incluye un proveedor predeterminado basado en atributos de validación que se incluyen en el espacio de System.ComponentModel.DataAnnotationsnombres.

8 Validación del lado del cliente:

La clase de proveedor del validador de modelos expone los metadatos de validación al navegador en forma de datos serializados JSON que pueden ser consumidos por una biblioteca de validación del lado del cliente.

ASP.NET MVC 2 incluye una biblioteca de validación de clientes y un adaptador que admite los DataAnnotationsatributos de validación de espacios de nombres mencionados anteriormente.

9 Nuevo RequireHttpsAttributefiltro de acción:

ASP.NET MVC 2 incluye una nueva RequireHttpsAttributeclase que se puede aplicar a métodos de acción y controladores.

De forma predeterminada, el filtro redirige una solicitud no SSL (HTTP) al equivalente habilitado para SSL (HTTPS).

10 Anulación del verbo del método HTTP:

Cuando construimos un sitio web usando el estilo arquitectónico REST, los verbos HTTP se usan para determinar qué acción realizar para un recurso.

REST requiere que las aplicaciones admitan la gama completa de verbos HTTP comunes, incluidos GET, PUT, POSTy DELETE.

ASP.NET MVC 2 incluye nuevos atributos que podemos aplicar a los métodos de acción y que cuentan con una sintaxis compacta.

Estos atributos permiten que ASP.NET MVC seleccione un método de acción basado en el verbo HTTP.

Por ejemplo, una POSTsolicitud llamará al primer método de acción y una PUTsolicitud llamará al segundo método de acción.

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

En versiones anteriores de ASP.NET MVC, estos métodos de acción requerían una sintaxis más detallada, como se muestra en el siguiente ejemplo:

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

Debido a que los navegadores solo admiten los verbos GETy POSTHTTP, no es posible publicar una acción que requiera un verbo diferente. Por lo tanto, no es posible admitir de forma nativa todas las RESTfulsolicitudes.

Sin embargo, para admitir RESTfulsolicitudes durante las POSToperaciones, ASP.NET MVC 2 presenta un nuevo HttpMethodOverridemétodo auxiliar HTML.

Este método genera un elemento de entrada oculto que hace que el formulario emule de manera efectiva cualquier método HTTP.

Por ejemplo, al usar el HttpMethodOverridemétodo auxiliar HTML, podemos hacer que el envío de un formulario aparezca como una solicitud PUTo .DELETE

El comportamiento de HttpMethodOverrideafecta a los siguientes atributos:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 nueva HiddenInputAttributeclase para ayudantes con plantilla:

Podemos aplicar el nuevo HiddenInputAttributeatributo a una propiedad de modelo para indicar si un elemento de entrada oculto debe representarse al mostrar el modelo en una plantilla de editor (el atributo establece un UIHintvalor implícito de HiddenInput).

La DisplayValuepropiedad del atributo nos permite especificar si el valor se muestra en los modos de edición y visualización.

Cuando DisplayValuese establece en falso, no se muestra nada, ni siquiera el marcado HTML que normalmente rodea un campo.

El valor predeterminado para DisplayValuees verdadero.

Podríamos usar HiddenInputAttributeel atributo en los siguientes escenarios:

  • Cuando una vista permite a los usuarios editar la ID de un objeto y es necesario mostrar el valor y proporcionar un elemento de entrada oculto que contenga la ID anterior para que pueda devolverse al controlador.
  • Cuando una vista permite a los usuarios editar una propiedad binaria que nunca debería mostrarse, como una propiedad de marca de tiempo.

En ese caso, el valor y el marcado HTML que lo rodea (como la etiqueta y el valor) no se muestran.

P.ej:

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.ValidationSummaryEl método auxiliar puede mostrar errores a nivel de modelo:

En lugar de mostrar siempre todos los errores de validación, el Html.ValidationSummarymétodo auxiliar tiene una nueva opción para mostrar solo los errores a nivel de modelo.

Esto permite que los errores a nivel de modelo se muestren en el resumen de validación y los errores específicos de campo se muestren junto a cada campo.

13 plantillas T4 en Visual Studio generan código que es específico para la versión de destino de .NET Framework:

Una nueva propiedad está disponible para los archivos T4 del host ASP.NET MVC T4 que especifica la versión de .NET Framework que usa la aplicación.

Esto permite que las plantillas T4 generen código y marcado que es específico de una versión de .NET Framework.

En Visual Studio 2008, el valor siempre es .NET 3.5. En Visual Studio 2010, el valor es .NET 3.5 o .NET4.

14 mejoras de la API:

CreateActionInvokerSe agregó un método virtual protegido en la clase Controlador.

Este método es invocado por la ActionInvokerpropiedad de Controller y permite la instanciación diferida del invocador si no se ha establecido ningún invocador.

Fuente de grabación: 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