template tag rendersection renderbody net mvc cshtml asp _layout asp.net-mvc

tag - Mejores prácticas para ASP.NET MVC



renderbody() (7)

  1. IoC / DI para Controller factory (para poder inyectar IRepository, ISomeService en el constructor de los controladores)
  2. nunca accedas a HttpContext directamente, construye el contenedor, para que pueda ser probado por unidades
  3. Marco de validación para validaciones de enlace modelo (xVal o FluentValidation). La validación incorporada dentro de MVC 1 es básica
  4. nunca use "cadenas mágicas": para llamar a controladores / acciones desde la Vista, para RouteLink, RenderPartial, RenderAction, ...
  5. nunca use ViewData, genere clases DTO ViewModel. Use AutoMapper para mapear datos de entidades de dominio a objetos ViewModel DTO para View

Objetos ViewModel DTO:
Clase abstracta de BaseViewModel, con propiedades para representar metadatos de página, menús y todo lo demás que aparece en cada página. Todas las demás clases de ViewModel se heredan de BaseViewModel.

Básicamente, esta "pregunta" tiene como objetivo reunir información sobre las mejores prácticas en la comunidad. Las razones de esto son:

  • La falta distintiva de un recurso de ASP.NET MVC basado en la comunidad para las mejores prácticas. Sí, soy consciente de wiki.asp.net.
  • Soy muy consciente de que la wiki de ASP.NET en ASP.NET MVC es terriblemente pequeña y terriblemente obsoleta y necesita que Microsoft la desarrolle más antes de que la comunidad haga algo al respecto.
  • Estoy muy interesado en las mejores prácticas en general, después de haber tenido un buen grado de experiencia con ASP.NET MVC durante el último año, pero también tengo en cuenta que no soy un experto y que definitivamente puedo mejorar. Este post, creo, puede ayudar eso, y usted.

Pensé seriamente en si debía o no hacer esta pregunta, incluso dándome mucha importancia a crear una pregunta en meta sobre la creación de esta pregunta. :)

Lo que busco es información de mejores prácticas sobre todos los aspectos de ASP.NET MVC. Controladores, modelos, extensiones, ayudantes de HTML, creadores de rutas, TDD.

En el pasado, he encontrado recursos, como las mejores prácticas de Kazi Manzur Rashid (parte 1 y 2 ), publicados bastante útiles, junto con el pesaje de Maarten Balliauw , pero estos se han secado un poco, y estaba esperando por un repositorio de información más dinámico y creciente de diferentes personas, en lugar de solo la entrada de blog ocasional de personas cultas. La información de este tipo es escasa y los recursos de la comunidad ASP.NET MVC lo son aún menos.

MVC en general

Modelo

Siéntase libre de agregar enlaces modelo

Puntos de vista

Controlador

Siéntase libre de agregar enlaces de controlador

Pautas:

  • Una "mejor práctica" por respuesta
  • Tómese el tiempo para explicar por qué debería preferirse a las alternativas.
  • Lea primero las respuestas existentes; si ve una con la que está de acuerdo, valídelo; Si no está de acuerdo, vote a la baja y deje un comentario explicando por qué.
  • ¡Siéntase libre de editar cualquier respuesta si puede ampliar por qué es "lo mejor"!

PD Por favor, no pongas "Cualquier cosa de Phil Haack , Scott Guthrie , Rob Conery o Scott Hanselman ".




Mantenga cualquier y toda lógica fuera de su vista. Su controlador debe determinar lo que se muestra; su vista debe ser tonta.


Mantenga sus controladores tan "finos" como sea posible. Simplemente pídales que validen los datos provenientes del formulario y luego llamen al modelo (que hace todo el trabajo real) para que los datos sean devueltos en su próxima Vista.

Tener controladores complejos rompe el concepto de MVC.


Si bien no es un sitio de mejores prácticas, el siguiente sitio está haciendo grandes cosas con asp.net MVC que probablemente podría considerarse la mejor práctica.

http://www.codeplex.com/MVCContrib


Use T4MVC para eliminar todas las cadenas mágicas y los tipos anónimos mágicos en todo su proyecto. Esto lo ayudará a refactorizar más tarde en su proyecto, y (además de tener que asegurarse de que sus rutas estén bien definidas) todas las llamadas de Acción obtienen sus parámetros correctos. Cambia llamadas como esta:

<%= Html.ActionLink("Link text", "Products", "Details", new { id = Model.Id }) %>

Dentro:

<%= Html.ActionLink("Link text", MVC.Products.Details(Model.Id)) %>