Introducción
Esto es algo que me he preguntado a mí mismo.Una pregunta que siempre tengo es similar a la tuya;
¿qué sería de una buena convención de nomenclatura ser?
¿Cómo debo nombre a las cosas?Deben ir en carpetas o proyectos?
Después de buscar alrededor sospecho que la respuesta es que realmente no importa.Lo importante es que la solución tiene algunas sensible de la arquitectura y que intenta seguir las buenas prácticas, tales como SÓLIDO.
Mi ASP.NET MVC héroes en este tema son Jeffrey Palermo, Steve Smith y Jimmy Bogard.
Cebolla Arquitectura
Jeffrey Palermo describe una combinación de viejas ideas, pero les une y le da visualmente estimulante nombre de Cebolla Arquitectura (se recomienda una lectura).Jeffrey muestra un buen enfoque para el problema de dónde poner las cosas.Él explica que en el centro (o superior) de la aplicación tiene su Core.Esta capa es donde se debe poner interfaces tales como IRepository
y IService
.
Casi todas las interfaces deben ir en el núcleo y todo lo demás (otros proyectos) puede hacer referencia al núcleo.De esta manera todo lo que sabe de la estructura esquelética de la aplicación sin conocer los detalles de la implementación.
Trate de tener su capa de interfaz de usuario de referencia como poco como sea posible (dentro de lo razonable).En una de mis aplicaciones de mi interfaz de usuario (MVC) de la capa sólo hace referencia al Núcleo.Todo lo que necesita es que le inyecta con La Inyección De Dependencia.
Steve Smith discute la Cebolla de la Arquitectura y de ideas similares, con demostraciones en MVC Solución de las Mejores Prácticas:Una solución para la solución de problema
Mi solución
En mi MVC soluciones tengo una típica estructura como esta:
- MyProject.Core
- MyProject.Dominio
- MyProject.DependencyInjection
- MyProject.Infraestructura
- MyProject.Web
- MyProject.Pruebas
El Core contiene mi interfaces.Es generalmente dividido en carpetas, como el de Servicios, Modelos de Dominio, Repositorios y así sucesivamente.
El Dominio la capa de referencias sólo el núcleo y contiene mi aplicación.Que proporciona una gran cantidad de de la clases concretas para el dominio de la abstracción en el núcleo.Se trata de una gran cantidad de lógica de negocio, procesamiento, control de comandos, gerente de clases, de hormigón implementaciones de servicio y así sucesivamente.Considero que es un bastante del interior de la capa y por lo que las referencias como poco como sea posible.
El DependencyInjection la capa contiene mi escogido DI paquete/marco y los detalles de implementación.Considero que es una capa exterior;similar a la interfaz de usuario o la Infraestructura y así que está bien si se hace referencia a una gran cantidad.No es necesario para esta capa a ser un proyecto independiente y muchas personas te dirán que no lo haga.Eso está bien;hacer lo que funciona para la complejidad de su proyecto.Me gusta mi DI a su propia cosa.Lo bueno de ser tan independiente es que podría reemplazar la DI marco con uno diferente y las cosas iban a estar bien.No hay ninguna capa de referencia de la DI proyecto.
El Infraestructura la capa contiene información acerca del registro, correo electrónico y acceso a datos.Contendrá mi ORM de la elección.No es de negocios de la lógica de las cosas y no de IU cosas.Es el ferrocarril de mi solución para hacer las cosas.Es en la capa exterior, pero sólo hace referencia al Núcleo.
El Web la capa es mi proyecto de MVC y sólo hace referencia al Núcleo.
La complejidad y reflexiones finales
He encontrado las respuestas a preguntas similares aquí, pero tienden a involucrar a una arquitectura más complicada de lo que he señalado aquí
Es un buen punto.Es importante tener en cuenta la complejidad de su problema.Pero no se desanime por buena la solución de las prácticas.Mi solución y la Cebolla Arquitectura no necesariamente son muy complejas y realmente no inflar su solución.Se acaba de separar las cosas.
En Evolutiva De La Estructura Del Proyecto, Jimmy Bogard habla acerca de las cosas más complejas.Si lo que me has dicho me parece demasiado complejo, siga Jimmy consejo y ponerlo todo en un proyecto (su capa de interfaz de usuario).Que bien, como siempre que se adapte a usted.
Recuerde tomar mi solución sólo como una idea - algo a tener en cuenta;mi enfoque es un intento de seguir los sabios consejos de los mejores, pero estoy seguro de que sólo he logrado mucho;Me puede (y debe) mejorar aún.