2012-09-11 13 views
6

En asp.net mvc (4), las vistas van directamente a la carpeta Views, y luego se agrupan por controlador en subcarpetas.ASP.NET MVC: Agrupación de clases alrededor del controlador

controladores entran en Controllers carpeta, (Ver/Editar/Entrada) Modelos entran en Models carpeta, etc.

me gusta la forma en que se organizan vistas. Sin embargo, no me gusta romper horizontalmente el resto de las piezas de MVC.

Mi pregunta es, ¿cuáles serían las desventajas de dejar vistas de la estructura de la organización de las cosas tal como están, pero agrupar otras clases por controlador (es decir, por casos de uso). Por ejemplo:

/Home 
    HomeController.cs 
    IndexViewModel.cs 
    IndexViewModelBinder.cs 
/Messages 
    MessagesController.cs 
    MessagesApiController.cs 
    MessagesViewModelBinder.cs 
    MessageViewModel.cs 
    MessagesListViewModel.cs 
/Views 
    /Home 
    Index.cshtml 
    /Messages 
    MessagesIndex.cshtml 
    MessageDetails.cshtml 
+1

Esto es en gran parte para lo que son las áreas. –

+0

Las áreas agruparán los componentes relacionados, es cierto, pero aún tendrá los 5 controladores en una carpeta y 10 modelos de vista en otra carpeta. Entonces, Areas alivian el problema, pero no es equivalente a la solución que expuse. –

Respuesta

3

Todo lo que importa es la disposición de los archivos de visualización porque se accede a ellos en tiempo de ejecución. Todo lo demás está compilado en el ensamblaje, por lo que la ubicación física de sus archivos fuente es irrelevante.

Al igual que me parece la disposición por defecto un poco incómodo para proyectos más grandes, así que esto es como yo estaba a cabo mis proyectos actuales:

~/ 
    /Areas 
     /DefaultArea // I always use areas, even when there's only one, because it simplifies things when adding additional areas. 
      /Controllers 
       FooController.cs 
      /Views 
       /Foo 
        FooView.aspx // Yes, I use WebFormView. Just a matter of personal preference 
        FooEdit.aspx 
        FooModels.cs // this file contains my ViewModels 

Así que, básicamente, puse mis clases ViewModel en la misma carpeta que el vistas en lugar de juntar todas las ViewModels (lo que tiene menos sentido lógico). Estuve tentado de poner mis Controladores en las carpetas de sus vistas, pero decidí no hacerlo.

No he encontrado inconvenientes en mi enfoque hasta ahora (lo he estado usando hace casi 2 años).

1

Generalmente me gusta evitar las áreas donde sea posible, ya que crea algunos problemas con el enrutamiento.

Creo que su estructura es completamente buena (y superior a la estructura MVC/Web predeterminada de código de separación basado en "tipo" más bien gracias a "función").

Todo lo que sugeriría es que solo conserve sus archivos "web" .cs en la DLL web (por ejemplo, controladores, ViewModels, carpetas, etc.) y tenga la misma estructura en DLL (s) para Domain/Services/etc capas para que puedan ser reutilizados/probados por separado si/como sea necesario.

Cuestiones relacionadas