23

Soy nuevo en este concepto de diseño completo, y en la lectura de las últimas semanas he reunido mucha información, pero parece estar dispersa y en conflicto. Los términos son mixtos, y solo estoy teniendo dificultades para pensar en esto.Aplicación MVC3/Capa de servicio/Capa de repositorio/Clases de POCO/EF4 - ¡Preguntas!

El patrón que estoy usando es como este y asumen el flujo como sigue:

Aplicación MVC
El controlador (s) procesar la petición/respuesta desde el cliente para una vista determinada. Dentro de los métodos de acción de los controladores, se ponen en contacto con los servicios (Capa de servicio) y solicitan objetos para construir los modelos de vista y devuelven los objetos de los modelos de vista.

Visualización de modelos
estoy usando modelos de vista inflexible hacia y desde los puntos de vista.

¿Están los modelos de visualización DTO? Deberían contener solo propiedades simples como Nombre, AddressLine1, Address City, etc., o deberían contener propiedades complejas, múltiples objetos, etc.

Es la validación en el modelo de vista. De ser así, sería una validación como los campos obligatorios, la longitud del campo, etc. Entonces, la validación como nombre de usuario ya existe, o donde necesitaría interactuar con otros objetos en la capa de servicio.

¿Pueden los modelos de vista solo contener las clases de POCO devueltas de EF, o debería usar AutoMapper?

Si usa AutoMapper y DTO, ¿son los clones de DTO de las clases de POCO?

¿Podría mapear en el controlador, ver modelo o en la capa de servicio a continuación?

Servicios
Para mí, el servicio (s) son objetos que entran en contacto con el repositorio (s) para obtener POCO objetos detrás de la EF. Aquí es donde está toda mi lógica comercial. Una vez que el servicio devuelve un objeto a un repositorio para que se conserve en el EF, se consideran objetos válidos. ¿Es esto correcto?

repositorios
No hay ninguna lógica de negocio en ellos, sólo son utilizadas para el transporte de objetos entre el servicio (s) y la EF. ¿Es esto correcto? Estoy implementando interfaces aquí con repositorio genérico. Entonces, ¿podría ampliar el repositorio genérico para necesidades especiales?

preguntas acerca de la terminología
1) ¿Es un objeto de negocio igual a un objeto de dominio? ¿Cuánta lógica debe contener un objeto de dominio?

2) ¿El modelo de dominio es el modelo EF? Estoy usando el enfoque Model-First.

3) Inyección Dependency - ¿Debo utilizar esto? Entiendo cómo funciona, simplemente no obtengo el beneficio real. Estaba jugando con Ninject.

Creo que la comunidad se beneficiaría de algún tipo de wiki que contuviera todas las mejores prácticas con muestras de código. ¿Hay algo así afuera? Muchas de las muestras disponibles son muy simples, y muchas de las muestras de Microsoft no usan este patrón incluso cuando afirman hacerlo.

Gracias de antemano a todos los que me han ayudado y me ayudarán con esto.

BTW - Creo Stackoverflow necesita un poco, botón "cómpreme una cerveza" al lado de la casilla de verificación "Aceptar respuesta" :)

Respuesta

30

son vistas en modelos DTO?

Podría considerarse un tipo de objetos de transferencia de datos entre el controlador y la vista.

debería contener propiedades simples como el nombre, AddressLine1, Dirección Ciudad, etc, o debería contener propiedades complejas, múltiples objetos, etc.

propiedades Idealmente simples pero podría también otros modelos de vista de agregado pero no hay modelos allí (ej: como modelos EF).

Es la validación en el modelo de vista.

Hay dos tipos de lógica de validación: validación de negocios (. Ex nombre de usuario ya existe) que entra en la capa de servicio y la validación de interfaz de usuario (por ejemplo: se requiere nombre de usuario) que va en el modelo de vista.

¿Pueden los modelos de vista solo contener las clases de POCO devueltas desde EF, o debería usar el AutoMapper?

No hay modelos EF in view. Los modelos de vista son clases POCO con propiedades simples y otras propiedades complejas que apuntan a otros modelos de vista. También podrían contener métodos para formatear correctamente los datos que se presentarán en la vista particular para la que se diseñaron esos modelos.

Si usa AutoMapper y DTO, ¿son los clones de DTO de las clases de POCO?

No estoy seguro Entiendo esta pregunta.

¿Podría hacer un mapa en el controlador, ver el modelo o en la capa de servicio a continuación?

El controlador.

Para mí, los servicios son objetos que entran en contacto con el (los) repositorio (es) para recuperar objetos POCO de la EF. Aquí es donde está toda mi lógica comercial. Una vez que el servicio devuelve un objeto a un repositorio para que se conserve en el EF, se consideran objetos válidos. ¿Es esto correcto?

Sí.

¿El modelo de dominio es el modelo EF?

Si está utilizando Código EF primera aproximación, entonces sí, de lo contrario no (si EF contamina el dominio con los atributos específicos de EF y clases).

No hay una lógica comercial en ellos, solo se utilizan para transportar objetos entre el servicio (s) y el EF. ¿Es esto correcto?

Sí.

Estoy implementando interfaces aquí con repositorio genérico. Entonces, ¿podría ampliar el repositorio genérico para necesidades especiales?

Sí, pero no se haga demasiado elegante. Normalmente los repositorios son para operaciones CRUD. Son servicios que deberían contener la lógica comercial.

¿Es un objeto comercial igual a un objeto de dominio?

Sí.

¿Cuánta lógica debe contener un objeto de dominio?

Esto dependerá de la cantidad de lógica de dominio que tenga para el proyecto particular que esté trabajando y de cualquier lógica de dominio existente que pueda reutilizar en proyectos anteriores en los que usted u otra persona hayan trabajado.

Dependency Injection - ¿Debería usar esto?

Sí, absolutamente.

entiendo cómo funciona, simplemente no reciben el beneficio real

Se proporciona un acoplamiento débil entre las diferentes capas de la aplicación que a su vez les hace más fácil de probar la unidad y la reutilización en otra proyectos.

Creo que la comunidad se beneficiaría de algún tipo de wiki que contuviera todas las mejores prácticas con muestras de código.

Estoy de acuerdo.

¿Hay algo así por ahí?

I duda it.

BTW - Creo Stackoverflow necesita un poco, botón "cómpreme una cerveza" al lado de la casilla de verificación "Aceptar respuesta"

No puedo estar más de acuerdo.

+0

arin - Si usa AutoMapper y DTO, ¿son los clones de DTO de las clases de POCO? Lo que quiero decir con esto es si, por ejemplo, tenía una visión que iba a mostrar la información básica de un cliente con una colección de direcciones y pedidos, asumiría que el modelo de vista tendría las propiedades básicas del cliente y luego una colección de direcciones y pedidos.¿Serán esas colecciones propiedades de los objetos POCO, o necesito crear una clase en la aplicación MVC que imite las clases de orden y dirección del POCO y las use en el modelo de vista? – Sam

+0

@Darin: ¿Está utilizando las clases generadas por POCO de EF usando el enfoque de primer modelo del mismo modo, o cierra también el método de primer código? Las clases de POCO son bastante simples. Eche un vistazo aquí: http://www.striano.net/Customer.vb.txt, ¿está esto contaminado? – Sam

+2

@Sam, si necesitara una vista que mostrara la información básica de un cliente con una colección de direcciones y pedidos, construiría un ClienteViewModel que contendría las propiedades básicas y un 'AddressViewModel' y un' OrderViewModel' que contendría el propiedades que le gustaría mostrar para un cliente determinado acerca de sus direcciones y pedidos y luego el 'CustomerViewModel' podría tener dos propiedades de colección de' AddressViewModel' y 'OrderViewModel'. –