2009-05-25 10 views
27

Mi pregunta puede ser obvia, pero me gustaría construir una aplicación web bien diseñada. En cuanto a cualquier área de administración, el administrador debería poder enumerar/crear/eliminar/modificar usuarios, artículos, publicaciones, etc. ...Área de administración en Asp.Net MVC

Me gustaría saber cuál es la mejor manera de diseñar la aplicación. Debería crear un controlador para cada uno de esos elementos (/ Users/Create/id o/Posts/Delete/id) o crear toda la acción en mi controlador de administración (/ Administration/CreateUser/id o/Administration/DeletePost /carné de identidad) ?

+3

Buena pregunta, tuve preocupaciones similares cuando comencé con MVC. –

Respuesta

14

Debe escribir un controlador por separado para cada entidad para mantener una separación clara de preocupaciones para sus clases de controlador. Si solo tiene un controlador, entonces solo tendrá un directorio de Vistas con docenas de vistas, y su controlador contendrá docenas de métodos, y eso pronto se volverá inmanejable.

0

Puede usar DynamicData para esto. No es MVC, pero se puede usar junto con él y es muy fácil de configurar y usar.

+0

Esto puede ser una buena idea, pero no tengo tiempo para aprender a usar DynamicData y hacerlo funcionar con MVC. – Flesym

+0

Utilicé DynamicData en un proyecto recientemente y tanto la configuración como su uso fueron muy simples. La forma más fácil sería crear un nuevo proyecto utilizando datos dinámicos. Entonces solo funciona de la caja. –

1

La respuesta depende de cuánta funcionalidad habrá en los controladores. Solo comience con un controlador y si se divide demasiado, divídalo en unos pocos. Lo mejor de MVC es que cuando coloca cosas en sus controladores no tiene que tener ningún efecto sobre las URL. puede asignar/Users/Create fácilmente a, p. ej. Clase UserAdminController.

1

Solo crearía un nuevo sitio web de MVC que maneje la administración. Tiene una solución más flexible siempre que haya separado los datos y la lógica comercial en diferentes ensamblajes. A continuación, puede publicar su sitio web en un subdominio, admin.yoursite.com, por ejemplo. De esta manera, no tiene que meterse con sus rutas y puede mantenerlas en vistas separadas, que es la solución más elegante. Pro's and Con's sería agradable de escuchar.

Estoy trabajando en un proyecto que necesitará el mismo sitio de administración, pero aún no he llegado tan lejos, por lo que esta pregunta me interesa mucho.

1

Actualmente estoy usando ASP.NET para un cliente grande.

El enfoque que he adoptado es poner la funcionalidad de la acción en otra clase.

Ejemplo

Estoy escribiendo una sección de administración también. Habrá un controlador de administración (nuestra sección de administración es pequeña; si fuera más grande, cambiaría la ruta para permitir más controladores, por ahora estamos usando la configuración predeterminada). Si creo una vista "EditUser". También crearé una clase "EditUserAction" . Todos los códigos EditUser entrarán en la clase. Construyo la clase EditUserAction en la clase de controlador de administración en el método Edit User. Esto elimina todo el código específico de acción de la clase Controller. De esta forma, todo el código específico de acción se encuentra en el método de acción o en la clase de acción. De lo contrario, el controlador se desbordaría rápidamente con el código de varias acciones. La clase de controlador se convertiría en un desastre inmanejable en poco tiempo.

ejemplos Clase

public class Administration: Controller 
{ 
    public ActionResult EditUser(string userId) 
    { 
     EditUserAction action = new EditUserAction(); 
    } 
} 

public class EditUserAction 
{ 
    public void Save(User user) 
    { 
     //save code here 
    } 
} 

espero que esta explicación es clara. Si no me lo dices, lo aclararé.

Para respuesta pregunta que estoy haciendo que este último (/Administración/CreateUser/Identificación del o /Administración/DeletePost/Identificación del).

+0

Entiendo su enfoque, pero realmente será un desastre monstruoso en mi controlador de administración. Estoy construyendo una especie de aplicación web de comparación de precios/comercio electrónico, ¡y mi área de administración ciertamente crecerá bastante rápido! Creo que construiré un nuevo sitio web de MVC que se encargará de la administración, incluso si mis jefes no lo quieren así. – Flesym

0

Aquí hay otra forma de hacer mi pregunta.

Una parte de mi página maestra:

<% if (!String.Equals(ViewContext.RequestContext.RouteData.GetRequiredString("controller"), "Administration")) { %> 
<div> 
    <!-- Some Code --> 
</div> <% } %> 

Como se puede ver, en mi página maestra, me gustaría mostrar una parte de la página, dependiendo del usuario que trabaja en el área de administración o no. Funciona bastante bien solo con el controlador de administración (/ Administration/CreateUser/id) ... pero se convierte en un gran lío cuando utilizo un controlador diferente como usuario o artículo (/ User/DeleteUser/id o/Article/Details/id)

Preferiría usar un controlador por entidad, pero no puedo encontrar la manera de vincular este enfoque con múltiples controladores.

+0

Si desea integrar la administración en su sitio web de esta manera, creo que sería mejor adoptar un enfoque de usuario. Simplemente implemente todo en el sitio web principal, pero muestre las acciones de edición/eliminación/creación solo a personas con los permisos correctos. No debe depender de la ruta que se sigue? – Peter

0

Sugiero usar this solution.

pero he cambiado a esta definición:

public ThemedViewEngine() 
    { 
     base.MasterLocationFormats = new string[] { 
      "~/Views/{1}/{0}.master", 
      "~/Views/Shared/{0}.master", 
      "~/Themes/{2}/Views/{1}/{0}.master", 
      "~/Themes/{2}/Views/Shared/{0}.master", 
      "~/Themes/Default/Views/{1}/{0}.master", 
      "~/Themes/Default/Views/Shared/{0}.master" 
     }; 
     base.ViewLocationFormats = new string[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/Themes/{2}/Views/{1}/{0}.aspx", 
      "~/Themes/{2}/Views/{1}/{0}.ascx", 
      "~/Themes/{2}/Views/Shared/{0}.aspx", 
      "~/Themes/{2}/Views/Shared/{0}.ascx", 
      "~/Themes/Default/Views/{1}/{0}.aspx", 
      "~/Themes/Default/Views/{1}/{0}.ascx", 
      "~/Themes/Default/Views/Shared/{0}.aspx", 
      "~/Themes/Default/Views/Shared/{0}.ascx" 
     }; 
     base.PartialViewLocationFormats = new string[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/Themes/{2}/Views/{1}/{0}.aspx", 
      "~/Themes/{2}/Views/{1}/{0}.ascx", 
      "~/Themes/{2}/Views/Shared/{0}.aspx", 
      "~/Themes/{2}/Views/Shared/{0}.ascx", 
      "~/Themes/Default/Views/{1}/{0}.aspx", 
      "~/Themes/Default/Views/{1}/{0}.ascx", 
      "~/Themes/Default/Views/Shared/{0}.aspx", 
      "~/Themes/Default/Views/Shared/{0}.ascx" 
     }; 
    } 

Tema por defecto es por defecto por lo que se requiere que existe.

Estructura del directorio será:

  • contenido
  • Temas
    • defecto
      • contenido
      • Vistas
        • Inicio
        • Blog
        • Lo que debería ser sin piel
    • OtherTheme
      • contenido
      • Vistas
        • Inicio
        • Blog
        • Lo que debería ser sin piel
  • Vistas
    • Artículos
    • Mensajes
    • Usuarios
    • Ajustes
    • Otras cosas Administración
0

Depende del tamaño de la escala de su área de administración, sugiero que usted considere hacer lo siguiente (o tal vez documentar un poco)

  • cuenta la cantidad de entidades que desea gestionar de forma independiente,
  • cuenta el número de acciones que cada uno tendrá,
  • Verificar que hay alguna dependencia entre la aplicación y el área de administración (acceso de los usuarios, para que el usuario URLs amigables)

luego puede especificar qué enfoque puede ayudarlo, Tener un controlador de administrador, acciones de administrador en los controladores de entidad o definir un nuevo proyecto de Administrador en caso de aplicaciones funcionales grandes.

* Si la escala del proyecto está creciendo rápidamente y pronto necesita una gran escala, elegiría la tercera, tener un nuevo proyecto de administrador de mvc.

Espero que lo ayude a decidir.

Cuestiones relacionadas