2010-04-04 10 views
5

Estoy buscando comentarios sobre mi arquitectura de aplicaciones CMS basada en ASP.NET MVC."pautas" de la arquitectura de aplicaciones ASP.NET MVC

Modelo de dominio: depende de nada más que las clases del sistema para definir los tipos. Por ahora, mayormente anémico.

capa de repositorio - abstraído acceso a los datos, sólo el llamado por la capa de servicios

servicios de la capa - realiza la lógica de negocio en los modelos de dominio. Expone modelos de vista a los controladores.

ViewModelMapper - servicio que se traduce de ida y vuelta entre la vista de modelos y modelos de dominio

Controllers - super "policía de tránsito" funcionalidad estilo fino que interactúa con la capa de servicio y sólo habla en términos de modelos de vista, nunca modelos de dominio

Mi modelo de dominio se utiliza principalmente como objetos de transferencia de datos (DTO) y tiene una lógica mínima en este momento. Estoy descubriendo que esto es bueno porque no depende de nada (ni siquiera las clases en la capa de servicios).

La capa de servicios es un poco complicada ... Solo quiero que los controladores tengan acceso a los modelos de vista para facilitar la programación de la GUI. Sin embargo, algunos de los servicios necesitan hablar entre ellos. Por ejemplo, tengo un servicio de eventos que notifica a otros servicios de escucha cuando se etiqueta el contenido, cuando se crean publicaciones de blog, etc. Actualmente, los métodos que toman modelos de dominio como entradas o los devuelven están marcados como internos para que no puedan ser utilizados por los controladores.

¿Suena como una exageración? No hay suficiente abstracción? Principalmente estoy haciendo esto como un ejercicio de aprendizaje al ser estricto con la arquitectura, no con un producto real, así que por favor no envíen comentarios como "el derecho depende de lo que quieran hacer".

gracias!

+1

El hecho de que hayas logrado decir tanto en pocas palabras debería darte una pista de que estás en el camino correcto. – pdr

Respuesta

2

En general, el diseño se ve bien para mí.

Hay algunos elementos más que podría hacer:

  • validaciones - tener una validación de 2 pasos -
    Paso 1: las clases de nivel de dominio para hacer valer su propia validez (a través de atributos o cualquier otro mecanismo)
    Paso 2: El repositorio se asegura de que el objeto es válido en el contexto de la repositorio

  • inyección de dependencias - utilizar un marco DI para inyectar dependencias. Será útil para pruebas unitarias. Además, si la capa de servicio donde se necesita llamar a través de los servicios, comprobar si este artículo sobre el servicio agregado es útil: http://blog.ploeh.dk/2010/02/02/RefactoringToAggregateServices.aspx

    • ViewModels - podría ser tentador para volver a utilizar, pero espera & reloj antes de que finalmente decida

HTH.

+0

Buena respuesta. En los viejos tiempos solíamos llamar Paso 1 "Validación" y Paso 2 "Verificación". – pdr

+0

Gracias Sunny.De hecho estoy usando StructureMap para DI, así que estoy bien allí. Actualmente, para la validación, tengo un servicio de validación que valida los modelos de dominio. Me gusta que los modelos eviten que entren en un estado no válido, y creo que prefiero tener las reglas comerciales del tipo "estado válido" incrustadas en los modelos de dominio. ¿Dónde trazas la línea entre las reglas que van en el modelo de dominio y en otras partes (servicio de validación, repositorios, etc.)? –

+0

Para mantener mi modelo de dominio en un estado válido, no coloco ningún conjunto de propiedades en mi modelo. En cambio, todos los cambios de estado deben pasar por un método que verifique que el cambio sea apropiado antes de aplicarlo. La desventaja es que si tiene muchos cambios potenciales, esto puede convertirse en una buena cantidad de código. Las operaciones de creación y eliminación continúan en la capa de repositorio. – Ryan

Cuestiones relacionadas