transporte superiores protocolos modelo funciones enlace datos capas capa entity-framework asp.net-mvc-3 repository-pattern poco service-layer

entity framework - superiores - Aplicación MVC3/Capa de servicio/Capa de repositorio/Clases de POCO/EF4-¡Preguntas!



funciones de la capa de red (1)

Son modelos de vista DTO''s?

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

En caso de que contengan propiedades simples como Nombre, AddressLine1, Ciudad de la dirección, etc., o que contengan propiedades complejas, múltiples objetos, etc.

Idealmente propiedades simples pero también podrían agregar otros modelos de vista pero no hay modelos allí (por ejemplo, como los modelos EF).

Es la validación en el modelo de vista.

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

¿Pueden los modelos de vista simplemente contener las clases POCO devueltas por EF, o debería estar usando el AutoMapper?

No EF en modelos de vista. Los modelos de vista son clases de 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 a la que se destinaron esos modelos.

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

No estoy seguro de entender esta pregunta.

¿Mapearía en el controlador, modelo de vista o en la capa de servicio a continuación?

El controlador.

Para mí, los servicios son objetos que se ponen en contacto con los repositorios para recuperar los objetos POCO del EF. Aquí es donde está toda mi lógica de negocios. 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í.

¿Es el modelo de dominio el modelo EF?

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

No hay lógica empresarial en ellos, solo se utilizan para transportar objetos entre los servicios 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 te pongas demasiado elegante. Normalmente los repositorios son para operaciones CRUD. Es servicios que deben contener la lógica de negocio.

¿Es un objeto de negocios 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 en particular en el que está trabajando y de cualquier lógica de dominio existente que pueda reutilizar de proyectos anteriores en los que usted o alguien más haya trabajado.

Inyección de dependencia - ¿Debo usar esto?

Si, absolutamente.

Entiendo cómo funciona, simplemente no obtengo el beneficio real

Proporciona un acoplamiento más débil entre las diferentes capas de su aplicación, lo que a su vez hace que sean más fáciles de probar y reutilizar en otros proyectos.

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

Estoy de acuerdo.

¿Hay algo así por ahí?

Lo dudo.

Por cierto, creo que StackOverflow necesita un poco, botón "Buy Me A Beer" al lado de la casilla de verificación "Aceptar respuesta"

No puedo estar más de acuerdo.

Soy nuevo en todo este concepto de diseño, y en lectura durante las últimas semanas he recopilado mucha información, pero parece dispersa y conflictiva. Los términos están mezclados, y me está costando mucho darme cuenta de esto.

El patrón que estoy usando es como este y asume el flujo de la siguiente manera:

Aplicación MVC
Los controladores procesan la solicitud / respuesta del 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 los objetos de los modelos de vista anteriores.

Ver modelos
Estoy usando modelos de vista fuertemente tipados desde y hacia las vistas.

Son modelos de vista DTO''s? En caso de que contengan propiedades simples como Nombre, AddressLine1, Ciudad de la dirección, etc., o que contengan propiedades complejas, múltiples objetos, etc.

Es la validación en el modelo de vista. Si fuera así, ¿sería una validación como los campos requeridos, la longitud del campo, etc. Entonces, la validación como el nombre de usuario ya existe, o dónde necesitaría interactuar con otros objetos en la capa de servicio?

¿Pueden los modelos de vista simplemente contener las clases POCO devueltas por EF, o debería estar usando el AutoMapper?

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

¿Mapearía en el controlador, modelo de vista o en la capa de servicio a continuación?

Servicios
Para mí, los servicios son objetos que se ponen en contacto con los repositorios para recuperar los objetos POCO del EF. Aquí es donde está toda mi lógica de negocios. 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 lógica empresarial en ellos, solo se utilizan para transportar objetos entre los servicios y el EF. ¿Es esto correcto? Estoy implementando interfaces aquí con repositorio genérico. ¿Entonces podría ampliar el repositorio genérico para necesidades especiales?

Preguntas sobre terminología
1) ¿Es un objeto de negocios igual a un objeto de dominio? ¿Cuánta lógica debe contener un objeto de dominio?

2) ¿Es el modelo de dominio el modelo EF? Estoy usando el enfoque Modelo-Primero.

3) Inyección de dependencia - ¿Debo usar 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 contenga todas las mejores prácticas con ejemplos de código. ¿Hay algo así por ahí? Muchas de las muestras que hay por ahí son muy simples, y muchas de las muestras de Microsoft no usan este patrón, incluso cuando se afirma.

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

Por cierto, creo que StackOverflow necesita un poco, botón "Buy Me A Beer" al lado de la casilla "Aceptar respuesta" :)