ASP .NET MVC arquitectura de control de usuario correcto
-
22-08-2019 - |
Pregunta
Estoy tratando de aprender el nuevo marco ASP .NET MVC y me gustaría saber la mejor práctica para el uso de UserControls.
Yo entiendo que se puede hacer de un UserControl como parcial y pasar los datos a ellos desde un controlador. Lo ideal sería que yo creo que no tiene sentido tener un código detrás de archivo ya que esto crea una tentación de romper las reglas MVC.
Voy a dar un ejemplo en el que no entiendo cómo UserControls encajan en el patrón.
Tengo un control de usuario que muestra el últimas etiquetas (al igual que en Desbordamiento de pila). A diferencia de lo Stackoverflow quieren mostrar este control de usuario en todas mis páginas. Si tengo una Controlador decir QuestionController que está hecha para manejar las acciones de algunos puntos de vista de interrogación, por ejemplo, y vista detalle, ¿significa esto que tengo que ir a buscar los datos de la QuestionController y luego pasarlo al control de usuario?
Si creo otro controlador decir SearchController entonces yo tendría que replicar la misma funcionalidad a Obtener las últimas etiquetas para pasar a una parcial de nuevo. ¿No significa esto que las 2 diferentes controladores están haciendo cosas adicionales que no estaban Originalmente la intención de hacer?
Solución
Si aparece el control de usuario en cada página, a continuación, una forma de abordar este sería el uso de un controlador de base de la cual derivan todos los controladores y generar el ViewData para el control de usuario reemplazando el método OnActionExecuting y poniendo la lógica allí. Si el control de usuario es menos penetrante, pero todavía se utiliza con frecuencia en todo el sitio, se puede extender ActionFilterAttribute y tienen su filtro de generar los datos necesarios. Este atributo podría ser utilizado para decorar los controladores o acciones que generan puntos de vista que utilizan el control de usuario.
Estoy asumiendo en todo esto que los datos para el control de usuario es independiente de la acción se invoca. Si hay una dependencia, es probable que sea mejor para empujar la lógica en una clase (o clases, tal vez utilizando Strategy) y hacer que la generación de los datos explícitos en cada acción o el controlador (a través anulando OnActionExecuting).
Otros consejos
Por otra parte, con ASP.NET MVC 2 ahora se puede utilizar para llamar a un RenderAction completamente nueva acción del controlador que puede recuperar los datos. Esto hace que su código mucho más modular y es más claro que los datos está viniendo.
También puede considerar la posibilidad de clases del modelo en una jerarquía. La clase alta (o una de las clases altas) contendrán los datos necesarios para sus controles de usuario generalizados. A continuación, puede cargar estos datos utilizados comúnmente en una clase de controlador de base.