miércoles, 27 de enero de 2016

Compare Attribute (ambiguios)

I work on the tutorial MusicStore of Jon Galloway and I found a problem with the Attribute Compare, because this attribute is ambiguios and in the original code only apper "Compare".

MSDN say:  "The recommended alternative is to use the System.ComponentModel.DataAnnotations.CompareAttribute type, which has the same functionality as this type."

In the first figure you can see the problem, in the second figure the soluction.





Figure 1.





Figure 2.
















miércoles, 20 de enero de 2016

ASP.NET Web API

ASP.NET MVC fue diseñado para la creación de sitios web y responder a las solicitudes de los navegadores y regresando HTML.

El patrón MVC puede usarse en la creación la capa de servicio, para crear servicios web que devuelven XML, JSON o en otros formatos que no sean HTML, incluso era mucho más fácil que lidiar con otros marcos de servicios, tales como la comunicación de Windows Foundation (WCF), o escribiendo controladores HTTP.

MVC 4 incluye una solución, la Web API ASP.NET (conocido como Web API), un marco que
ofrece el estilo de desarrollo ASP.NET MVC, pero se adapta a la escritura de servicios HTTP. Incluye algunos conceptos ASP.NET MVC para el dominio de servicio HTTP y el suministro de características orientadas a servicios.

Enseguida algunas de las características de la Web API que son similares a MVC, pero adaptadas a los servicios HTTP:

Routing: La Web API ASP.NET utiliza el mismo sistema de definición de rutas URL de asignación para controlar las acciones. Se contextualiza el enrutamiento de servicios HTTP mediante mapeo de verbos HTTP a las acciones por convención, es decir se ha pactado seguir un orden por nombres de los elementos de programación, que hacen que el código sea más fácil de leer y promueve el diseño de servicios REST. 
Modelo relacionado y validación: MVC simplifica el proceso de mapeo de valores de entrada (campos de la forma, cokkies, los parámetros de las URL, etc.) para el modelado de valores, Web API mapea automáticamente los valores de las solicitudes HTTP a los valores modelos, El sistema de vinculación es extensible e incluye la misma validación atributo-base se utiliza en el modelo MVC.
Filtros: MVC utiliza filtros para agregar conductas a las acciones a través de atributos. Por ejemplo, la adición de un atributo [Authorize] para una acción MVC prohibirá el acceso anónimo, y dirige la solicitud a la página de inicio de sesión. La Web API también es compatible con algunos de los filtros estándar de MVC (como un servicio optimizado [Autorizar] atributo) y filtros personalizados. 
Scaffolding: La traducción de scaffolding es andamiaje, y en efecto este andamiaje permite crear un una estructura que comunica los elementos de MVC para para crear los controladores (Controller) que se comunican con las vistas y estas a su vez con el modelo. Se añaden nuevos controladores de la API Web utilizando el mismo cuadro de diálogo que se utiliza para agregar un controlador  MVC o). Así mismo puede utilizar el mismo cuadro de diálogo para que por medio de scaffolding  agregar un controlador basado en el modelo de datos de Entity Framework.
Unidad de prueba: Al igual que MVC, la Web API se construye en torno a los conceptos de inyección de dependencia y evitando el uso de estado global.
La Web API también añade algunos nuevos conceptos y características específicas para el desarrollo de servicios HTTP. 
Modelo de programación HTTP: La experiencia de desarrollo de Web API está optimizado para trabajar con las peticiones y respuestas HTTP. Hay un modelo de objetos fuertemente tipado HTTP, códigos de  estado HTTP y las cabeceras para fácil acceso, etc.
Acciónes basadas en verbos HTTP: En MVC el envío de los métodos de acción es basado en sus nombres. Los métodos en la Web API se pueden automatizar para ser enviados base a lod verbos HTTP. Así, por ejemplo, una petición GET sería enviado automáticamente a un controlador acción nombrada GetItem. 
Negociación de contenido: HTTP ha apoyado durante mucho tiempo un sistema de negociación de contenido, en el que los navegadores (y otros clientes HTTP) indican sus preferencias de formato de respuesta, y el servidor responde con el formato preferido más alto que puede soportar. Esto significa que su controlador puede suministrar XML, JSON, y otros formatos (de hecho puede añadir uno propio), respondiendo a lo que el cliente más prefiere. Esto le permite añadir soporte para nuevos formatos sin tener que cambiar el código de controlador. 
Configuración basada en Código: A diferencia de la compleja y detallada configuración basada en archivo de WCF. La Web API se configurada por completo a través del código.

Aunque La Web API ASP.NET se incluye con MVC 4, puede ser utilizada por separado. No tiene dependencias de ASP.NET en absoluto, y puede ser alojado fuera de ASP.NET y IIS. Esto significa que puede ejecutar la Web API en cualquier aplicación .NET, incluyendo un servicio de Windows o
incluso una aplicación de consola simple.

El diseño visual de las plantillas predeterminadas para proyectos MVC 1 llego a MVC 3 sin cambios. Actualmente se ha mejorado estas plantillas en MVC 4,  HTML and CSS para las plantillas fuern completamente diseñadas.

Debido a la proliferación de smartphones y tabletsen el mercado actual, existe más diversidad que formato de pantalla, esta situación obliga a adaptar los formatos web a estos nuevos dispositivos y la estructura de ellos, se requiere que sitios web inteligentes que se adapten a estas pantallas.

Aparece el termino "responsive web desing" y corresponde a una técnica de diseño a través de CSS para configurar en el momento de detectar el tamaño de la pantalla. Y las nuevas plantillas de MVC 4 están diseñadas bajo esta técnica

Display Modes
Los modos de visualización utilizan un enfoque basado en "convención" para permitir la selección de diferentes puntos de vista sobre la base de la navegador que hace la solicitud.

Cuando el agente de usuario del navegador indica un dispositivo móvil , el motor para la vista observa que el archivo tenga  la extensión .cshtml y lo reconoce para dispositivos moviles.

Bulding and Minification
Agrupación y minificación son dos técnicas que se puede utilizar en ASP.NET 4.5 para mejorar el tiempo de carga, mediante la reducción del número de peticiones al servidor y reduciendo el tamaño de los activos solicitados,como los archivos CSS y JavaScript ).


MVC 4 y Librerías de código abierto
Las plantillas de proyectos MVC incluyen las mejores bibliotecas de código abierto como jQuery y Modernizr. A partir del MVC 3, éstas se incluyeron a través NuGet, lo que hace que sea aún más fácil de actualizar ellos y gestionar la integración de software.


  • Json.NET: Json.NET es una biblioteca .NET para el manejo de datos en notación JavaScript Object Notación (JSON). Se incluyó en MVC 4 como parte de API Web para el manejo de serialización a formato JSON,  para contratos de datos, tipos anónimos, tipos dinámicos, fechas, preservación de referencias a objeto, sangría,  notación camel, y otras características para la serialización. Hay también características adicionales de Json.NET, que incluye  LINQ to JSON y conversión automática de JSON a XML.
  • DotNetOpenAuth: MVC utiliza DotNetOpenAuth para soportar os proveedores de loggin e identificación basados ​​en OAuth OpenID- . El Account Controller está configurado para soporte para Facebook, Microsoft, Google y Twitter; ya que estos son los inicios de sesión construido con OpenID y OAuth, es posible con otros proveedores. Mientras utilice las clases DotNetOpenAuth directamente, MVC 4 también proporciona una OAuthWebSecurity (en el espacio de nombres Microsoft.Web.WebPages.OAuth) para simplificar el común.


Otras características
MVC 4 incluye un una  gran cantidad de características. La lista completa se encuentra en las notas de la versión, disponible en http://www.asp.net/whitepapers/mvc4-release-notes. Algunos de los más interesantes que no encajar en cualquiera de los temas anteriores están listados aquí.

La lógica de configuración en App_Start: Las nuevas características son buenas, pero la lógica adicional para las características que son de configuración por código estaba empezando a saturar el método Application_Start de Global.asax. Estas configuraciones se han trasladado a las clases estáticas del Directorio App_Start.
AuthConfig.cs: Usado para configurar los ajustes de seguridad, incluyendo los sitios de OAuth de inicio de sesión.
BundleConfig.cs: Usado para registrar los paquetes utilizados por la agrupación y minificación del sistema. Varios paquetes se añaden por defecto, incluyendo jQuery, jQueryUI, jQuery validación, Modernizr y referencias CSS por omisión.
FilterConfig.cs: Filtros globales MVC.
RouteConfig.cs: Ruta de configuración.
WebApiConfig.cs: Se utiliza para registrar rutas Web API y ajustes de configuración.


  • Plantilla de proyecto MVC vacía: MVC 4 ha incluido una plantilla de proyecto vacía, la cual aparecía desde MVC 2, pero la plantilla realmente no esta no era realmente vacía; incluye una estructura de carpetas, un archivo CSS, y una docena de archivos JavaScript. Esta plantilla ha sido renombrada como Basic y ahora la plantilla de proyecto vacío esta vacía.


  • Añadir un Controller desde cualquier lugar: Anteriormente, el Visual Studio añadia elemento Controller desde la carpeta Controllers donde aparecía. Sin embargo, el uso de la carpeta era puramente para la organización. (MVC reconocerá cualquier clase que implemente la Interfaz IController como controlador, independientemente de su ubicación en la aplicación.) Las herramientas de Visual Studio para  MVC 4 se han modificado para que aparezca el elemento de menú Agregar controlador para cualquier carpeta en su proyecto MVC. Esto le permite organizar sus controladores.


ASP.NET MVC es Open Source
ASP.NET MVC se ha manejado con licencia de código abierto desde la versión inicial, pero sólo era código fuente abierto en lugar de un proyecto completo. Es posible leer el código; incluso se podría modificar, pero no se puede contribuir al código oficial de MVC.

En mayo del 2012 se anuncia Web Stack ASP.NET como código abierto. Este anuncio marcó la transición de ASP.NET MVC, de las páginas Web ASP.NET (incluyendo Razor el motor de vistas), y la API Web ASP.NET a código abierto con licencia para proyectos de código completamente abierto.

Todos los cambios en el código y el seguimiento para estos proyectos se realiza en repositorios de código públicos, y estos se permiten contribuciones de código de la comunidad, si el equipo está de acuerdo que los cambios tienen sentido.

En poco tiempo, varios errores se corrigen y se agregan características que han sido aceptados en la fuente oficial y serán liberados con  MVC 4. Puede ver la fuente y los check-ins a medida que ocurren (en http://aspnetwebstack .codeplex.com / SourceControl /list/changesets) e incluso ejecutar las ultimas versiones  del código para probar las nuevas características a medida que se escriben.


Referencias:
  • Professional ASP.NET MVC 4 de los autores Jon Galloway, Phil Haack, Brad Wilson, K. Scot Allen de editorial Wrox.
  • Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components, https://msdn.microsoft.com/en-us/library/aa479332.aspx





viernes, 15 de enero de 2016

Característica importantes de ASP.NET MVC 3

Estas características se presentan en MVC 3 pero son parte de MVC 4 y son importantes de destacar.

Razor View Engine
Razor es motor del lado del servidor Web, que interpreta instrucciones que siguen una sintaxis y forma especifica para ese motor; estas instrucciones se colocan en ASP.NET Web Pages y ASP.NET MVC 3 y 4 y es la alternativa al motor de Web Forms, que se utilizaba en MVC 1 y 2.

Su sintaxis es simple y acompaña a páginas que utilizan HTML. EL código es interpretado del lado del servidor antes de que se envíe la página Web al explorador del cliente. Puede generar contenido para el cliente y mandarlo junto con el código HTML estático.

Las páginas de  Web Forms se centran en controles de servidor web que generan código HTML automáticamente y usan presentan un efecto parecido a la programación por eventos. Razor trabaja de forma más directa con HTML y el cliente produce virtualmente todo el HTML necesario. Esto hace más ligeras a las páginas Web.

Las paginas web que hacen uso de Razor tienen extención .cshtml o vbhtml. El servidor lo reconoce y usa el motor Razor, ejecuta las instrucciones y envía el resultado al explorador.

El siguiente es un ejemplo de código Razor, el símbolo @ indica el inicio de código Razor

<ul>
@foreach(var item in unaColeccion)
{
   <li>@item</li>
}
</ul>


  • Razor fue diseñado específicamente como un motor de sintaxis para vista. Este tiene como enfoque principal: código enfocado  a plantillas para la generación de HTML. Y como se puede ver en el código anterior, es mucho más fácil escribir código Razor.
  • No es un nuevo lenguaje, pues permite usar la sintaxis conocida de C# o VB.
  • Puede utilizarse cualquier editor de texto.
  • En el caso de usar Visual Studio se tiene la capacidad de usar IntelliSense.


Mejora en la validación
La validación es una parte importante del desarrollo de aplicaciones, pero no es algo simple, MVC 3 y 4 extienden los escenarios que previa MVC 2.

MVC 2 fue compilado con .NET 3.5, así que no soportaba la validación por medio de los atributos de DataAnnotations; este se encuentra en el espacio de nombres System.ComponentModel.Annotations para especificar la validación de campos individuales en el modelo de datos, como por ejemplo campos obligatorios, manejo de intervalos; y permite hacer comprobaciones del lado del cliente y de servidor sin programar código adicional.

Puede ser usado con Entity Data Model(EDM), LINQ para SQL, etc. Permite también crear atributos de validación personalizados, vea las referencias para más detalle.

Uso de ValidationAttribute, permite crear validación personalizado creando metadatos en el modelo de datos para validación. Los datos dinámicos de ASP.NET permiten personalizar y extender la validación de datos al nivel de la capa de datos.

Unobtrusive JavaScript (JavaScript no obstruyente)
Una de las criterios en el desarrollo de aplicaciones web, dicta que no se introduzcan eventos dentro de los elementos HTML. Los validadores lo detectan y avisan de anormalidades. Un ejemplo de código obstruyente y que no debería ser utilizado sería el siguiente:

<div onclick ="javascript:alert('Ejemplo de JavaScript obstruyente');">Prueba de JavaScript</div>

ASP.NET MVC maneja el concepto de JavaScript no obstruyente y la validación en el cliente. Se configura en el archivo web.config dentro de la carpeta appSettings

 <appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>

Se crean atributos dentro de la etiqueta HTML, usando: jquery.validate.unobtrusive y jquery.unobtruisive-ajax.

La idea es que el código JavaScript siempre se encuentre en archivos externos, se que se incluyen en la vista, nunca se escribe de forma directa en la vista. Se debe independizar el código HTML de JavaScript.

MVC 3 soporta JavaScript no osbtruyente de dos formas.

  • Auxiliares Ajax, como Ajax.ActionLink y Ajax.BeginForm, dan un marcado limpio para la etiqueta FORM , conectan el comportamiento extendiendo atributos (data attributes) y JQuery
  • Validación Ajax sin emición de reglas de validación como un bloque de de datos JSON, en lugar de escribir las reglas de validación utilizando los atributos de datos. 

Validación JQuery
MVC 2 se expande con JQuery usando Microsoft Ajax para validación. MVC 3 completa la transición usando JQuery para el soporte de Ajax convirtiendo el soporte de la validación para correr el plugin JQuery Validation. Al usar esta estrategia de validación se hace extremadamente flexible, beneficiándose de la enorme comunidad JQuery.

La validación del lado del cliente se activa de forma predeterminada para proyectos MVC 3 y 4 y se puede activar en todo el sitio con el archivo web.config o por el código global.asax para proyectos superiores.

Soporte a JSON
JSON es usado por JavaScript para la representación de datos, que actualmente es utilizado para almacenar e intercambiar datos entre aplicaciones y así mismo es una alternativa a XML. Es ligero pues es texto solamente,independiente del lenguaje, es auto-descriptivo y al ser texto puede ser leído por cualquier lenguaje.

Es idéntico en el la forma en que se crean los objetos en JavaScript. En vez de usar un parser (analizadores, como lo hace XML), un programa JavaScxript puede usar funciones JavaScript para convertir datos JSON en objetos propios de JavaScript.

Es utilizado en aplicaciones AJAX y es más rápido que XML, XML usa un documento y DOM para iterar sobre el documento, extrae los valores y los almacena en variable. Usando JSON, los datos entran por cadena y se utiliza una función para convertirlos en objetos de JavaScript.

Por medio de JsonValueProviderFactory que contiene métodos para enviar y recibir texto con formato JSON como parámetros de métodos, es como se da soporte a JSON por parte de ASP.NET MVC 3 y 4.

Solución de dependencias
MVC 3 introduce un nuevo concepto llamado dependecy resolver, que simplifica enormemente el uso de inyección de dependencias en sus aplicaciones para simplificar la inyección de dependencias en las aplicaciones. Esto hace fácil desacoplar los componentes de las aplicaciones, haciendo facilitando la configuración y las pruebas.

Se agrego soporte para los siguientes escenarios:

  1. Controllers(inyección de controladores, registro e inyección de fabrica de controladores)
Un controlador es una clase que hereda de la clase Controller, esta clase no tiene un constructor predeterminado por omisión, es decir sin parámetros, definido. En MVC se tiene algo conocido como factoría de controladores, cuya función es inicializar los controladores. Para esto se debe crear una nueva clase que implemente la interfaz IControllerFactory. Estas clases responden a la solicitud de usuario llamando a las Views (o vistas) con las que el usuario interactua.
  1. Views (registro e inyección  de motores de vistas, inyección de dependencias dentro de paginas "vista"), que son el elemento con los que el usuario interactua.
  2. Action filters (localización e inyección de filtros)
Se usan los filtros de acción para tareas de registro, autenticación o almacenamiento en caché de resultados, entre otras. Se implementa como un atributo que hereda de la clase ActionFilterAttribute.
  1. Model binders (registro e inyección)
  2. Model validation providers (registro e inyección)
  3. Model metadata providers (registro e inyección)
  4. Value providers (registro e inyección)

Estos son temas de gran tamaño que requieren un tratamiento profundo.

Global Action Filters (Filtros de Acción Global)
En ASP.NET MVC los controladores (mediante sis métodos de acción) se encargan de la interacción con los usuarios y el sistema. Las peticiones al servidor mediante la interpretacion de ruts (UrlRoutingModule) se analiza la url y la redirecciona al controlador y método de acción adecuado, que estiona la petición y regresa el resultado.

Estos filtros permiten por medio de atributos agregar comportamientos previos y posteriores a los métodos de acción de los controladores. Y se presentan como atributos de la clase abstracta FilterAttribute.



Referencias:

Cómo: Validar los datos del modelo mediante los atributos de DataAnnotations: https://msdn.microsoft.com/es-mx/library/ee256141(v=vs.100).aspx

Cómo: Personalizar la validación de campos de datos en el modelo de datos mediante atributos personalizados: https://msdn.microsoft.com/es-es/library/cc668224(v=vs.100).aspx

Validaciones con DataAnnotations: http://puntonetalpunto.blogspot.mx/2013/10/validaciones-con-dataannotations.html


Javascript no obstrusivo: http://si.ua.es/es/documentacion/asp-net-mvc-3/4-dia/javascript-no-obstrusivo.html

JSON: http://www.w3schools.com/json/json_syntax.asp


Tutorial: Crear un proyecto de MVC básico con pruebas unitarias en Visual Studio: https://msdn.microsoft.com/es-mx/library/dd410597(v=vs.100).aspx

Cómo: Crear un filtro de acción personalizado: https://msdn.microsoft.com/es-mx/library/dd410056(v=vs.100).aspx

http://josemartinez.info/2015/05/11/filtros-en-asp-net-mvc/: http://josemartinez.info/2015/05/11/filtros-en-asp-net-mvc/

martes, 12 de enero de 2016

Introducción a ASP.NET MVC 4

El patrón Modelo Vista Controlador ( MVC)  es un modelo o patrón independiente de cualquier empresa o lenguaje, es una modelo arquitectónico para el desarrollo de software.

Cuando hablamos de arquitectura de software, sin entrar en grandes malabares intelectuales, hablamos de la manera en como organizar el trabajo, en que orden lo vamos a realizar; cuales son los materiales con los que construimos, en donde y cómo los vamos a colocar para tener fácil acceso a ellos; cómo los vamos a juntar o integrar, que orden seguiremos en las tareas a realizar, que materiales van con cuales y en que orden.

La forma de organizar y hacer el trabajo es conocido como patrón o modelo, y la elección de un patrón o modelo esta relacionado con el tipo de problema que estemos atacando. En México hay un dicho que dice: "Según el chango, es la pedrada", y creo que va bien con la idea de seleccionar un patrón según el tipo de problema que enfrentemos.

ASP.NET MVC es un Framework para el desarrollo de aplicaciones web, proporcionado por Microsoft, y que aplica el patrón arquitectónico Modelo Vista Controlador (MVC) para el framework ASP.NET.

Los conceptos de framework son bastantes y pulidos, en mi opinión un framework es un conjunto (que puede llegar a ser muy grande) de herramientas, como espacios de nombres, clases, estructuras, tipos de datos, etc.,  a los que además hay que sumarle que todas estas herramientas están pensadas para realizar trabajos particulares en áreas particulares, y que también siguen y mantienen una idea principal de como organizar y hacer ese trabajo.

En 2002 se lanza ASP.NET 1.0, se llego a pensar que ASP.NET y Web Forms eran lo mismo. ASP.NET tiene dos capas de abstracción.
  • System.web.UI: La capa de Web Forms, esta capa contiene a los controles de servidor, el ViewState, etc.
  • System.Web: La parte interna - los "fierros" - que proporcionan todo el soporte para el desarrollo de aplicaciones Web, módulos, manejadores, el soporte a HTML, etc.
El método principal de desarrollo con ASP.NET incluía el soporte a Web Forms, es decir, al proceso  de arrastrar y pegar controles, que evita trabajar de forma directa con HTML y las tareas que esto implica.

Para 2007 fue anunciado ASP.NET MVC, el patrón MVC tenia tiempo ya de existir y era una forma popular de construir frameworks para web.

El patrón MVC
 MVC (Model-View-Controller) ha sido un importante modelo arquitectónico de construcción de aplicaciones para las ciencias de la computación o las Tecnologías de la Información.

Como en todo el "hacer" humano se van mejorando las formas de trabajo. Al principio de un descubrimiento todo se realiza de forma artesanal y después se encuentran formas más rápidas y mejores de hacer el trabajo; el desarrollo de software tiene este desarrollo.

Originalmente el modelo o patrón MVC fue llamado Thing-Model-View-Editor. Su idea interior es la identificación y separación de tareas. Esta identificación y organización nos lleva a la construcción de conceptos o intereses, por ejemplo: la separación de la lógica de acceso a datos de la de presentación al usuario.

El concepto de "lógica" en este medio ambiente debe ser entendido en el sentido de la organización de los elementos y el orden en que estos se unen o integran para realizar una tarea, por ejemplo el acceso a los datos.

La separación de tareas generalmente produce importantes avances en la construcción de aplicaciones. Ayuda a evitar complejidad extra y menores esfuerzos. El clásico "divide y vencerás".

MVC  aplicado
MVC separa la interfaz de usuario (UI) de una aplicación en tres principales aspectos:

El Modelo: es un conjunto de clases - en efecto, son nuestras ya conocidas clases - que describen los datos con los que trabajamos, y cuando se dice que describen es que la clase contiene las propiedades necesarias para reconocerlas como nuestros puentes entre nuestra aplicación y la fuente de datos; así como las reglas de negocios que definen cómo los datos pueden ser manejados y modificados.

La Vista: Define cómo la interfaz de usuario será presentada. En nuestro caso es el HTML y otros elementos que permiten construir lo que el usuario ve.

El Controlador: Un conjunto de clase - y nuevamente, entran en escena las clases - que manejan la comunicación del y para el usuario, en general manejan el flujo de la aplicación  y secciones especificas de lógica de la misma.


MVC como un interfaz de usuario
Nos referimos a MVC como un patrón para la UI para facilitar su acercamiento al mismo, ya que MVC presenta una solución para el manejo de la interacción con el usuario, pero no se menciona nada acerca de como manejar otros intereses como el acceso a datos, interacción con servicios web, etc.

ASP.NET MVC
MVC es un un patrón arquitectónico, ASP.NET MVC esta enfocado en proveer un framework para el desarrollo web usando el patrón MVC y ejecutandose en una plataforma .NET, es decir en medio ambiente Microsoft Windows.

ASP.NET MVC mantiene una relación estrecha con las estrategias principales que se usan en MVC, ofreciendo la compilación y administración de código, así como las nuevas características de los lenguajes .NET, como las expresiones lamba y tipos dinámicos y anónimos. Los fundamentos seguidos son:
  • Convención sobre configuración, es decir que se da una importancia alta a la organización de los elementos de trabajo como: carpetas, archivos, nombres de elementos de software, etc. sobre la configuración de la aplicación.
  • Uso del principio DRY (Don't repeat yourself) . El principio "No repitas" evita la duplicidad de los elementos de software, muy importante ya repetir incrementan la dificultad en los cambios y la evolución de las aplicaciones, complica la claridad y crea espacios de inconsistencias. Estos elementos de software repetido pueden presentarse tanto en bases de datos como en elementos de código. Al usar este principio podemos realizar cambios en un solo lugar mejorando la posibilidad de la evolución de la aplicación. 
  • Siempre que sea posible use Pluggability
ASP.NET ofrece diferentes herramientas para crear componentes con diferente funcionalidad. Las dos herramientas más comunes para reutilización en ASP.NET son:
  • Controles del usuario y los controles de servidor, compilados para ser elementos de la interfaz de usuario y de la funcionalidad de la aplicación.
  • Bibliotecas de clases de .NET para la lógica de negocio y el código de acceso a datos.
Dos herramientas de reutilización ASP.NET que no reciben mucha atención son módulos y controladores HTTP
Si usted no está familiarizado con lo controladores HTTP y módulos, no se preocupe. Hablaremos más sobre ellos más adelante en este artículo. Por ahora, sólo entienden que los módulos HTTP son clases que se pueden configurar para funcionar en respuesta a los eventos que se disparan durante la solicitud de un recurso ASP.NET.  
Un controlador HTTP es una clase que se encarga de la prestación de un recurso en particular, o un determinado tipo de recurso 
Cada vez que se agrega una página Web ASP.NET a su proyecto, usted está esencialmente escribiendo un controlador HTTP. Esto es porque cuando la parte HTML de una página Web ASP.NET se compila dinámicamente en tiempo de ejecución, hereda directa o indirectamente de System.Web.UI.Page, que pasa a ser una implementación de controlador HTTP. Esto es cierto independientemente de si usted  utiliza la estrategia de código subyacente.
  • Puede ser útil, pero si no es necesario, retíralo del  camino del desarrollo. Evitar el desarrollo de elementos software que no entren en los requerimientos puede ser muy tentador y los auto abrazos al ego son algo común entre programadores. 
Como anécdota hablaré de una aplicación que requería un par de reportes y el programador creo un módulo completo para que el usuario creara todos los reportes que quisiera con los campos que quisiera, de las tablas que quisiera. ¿Muy bueno? bueno el "reporteador" llego a adquirir una importancia tal que se llego a olvidar el objetivo principal de la aplicación. Tomando más tiempo del necesario para la liberación del sistema y tristemente el "reporteador" nunca fue liberado y se opto por realizar solo los reportes necesarios.



El camino hacia MVC 4
En Marzo del 2009 se lanza ASP.NET MVC 1 y en el transcurso de tres años se llego a MVC 4.

ASP.NET MVC 2 es lanzado en Marzo del 2010, incluyendo:

  • Auxiliares para scaffolding (uso de infraestructuras básicas) para las construcción de plantillas o estructuras a la medida.
  • Validación basada en el modelo de atributo tanto del lado del cliente como del servidor
  • Auxiliares HTML fuertemente tipados.
  • Mejora en las herramientas de Visual Studio.
También hay mejoras a un gran conjunto de APIs, basadas en la retroalimentación de los desarrolladores.
  • Soporte para la partición de aplicaciones largas en áreas.
  • soporte a controladores asíncronos
  • Soporte para el re-dibujo (rendering) de subsecciones de una página, usando Html.RenderAction.
  • Nuevos auxiliares de funciones y utilerias, así como mejoras APIs.

ASP.NET MVC 3
Diez mese después de MVC 2 aparece MVC 3, 2011, incluyendo las siguientes características.
  • Uso del motor de vistas Razor -recuerde que uno de los motores de vista es Web Forms, usado para MVC 1 y 2-. El motor Razor esta diseñado como un motor de vistas basado en sintaxis.
  • Soporte para anotación de datos para NET 4.
  • Mejora de la validación del modelo.
  • Mayor control y flexibilidad para el soporte de resolución de dependencias y filtros de acción global.
  • Mejor soporte a JavaScript, validación de JQuery y enlace a JSON.
  • Uso de NuGet para liberar software y manejar dependencias en la plataforma.
ASP.NET MVC 4
En el mes de Julio del 2011, se anuncia su liberación. Sus características incluyen:


  • ASP.NET Web API
  • Mejora de los proyectos por omisión
  • Plantillas para proyectos de "Mobiles" usando JQuery
  • Modos de Display
  • Soporte a tareas (Task) y controladores asíncronos.
  • Bulding  and minification
Agrupación y minificación son dos técnicas que se puede utilizar en ASP.NET 4.5 para mejorar el tiempo de tiempo de carga, mediante la reducción del número de peticiones al servidor y reduciendo el tamaño de los activos solicitados,como los archivos CSS y JavaScript ).

Referencias:
  • Professional ASP.NET MVC 4 de los autores Jon Galloway, Phil Haack, Brad Wilson, K. Scot Allen de editorial Wrox.
  • Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components, https://msdn.microsoft.com/en-us/library/aa479332.aspx
  • Bundling and Minification, http://www.asp.net/mvc/overview/performance/bundling-and-minification