2011-02-16 13 views
5

Estoy trabajando en una aplicación cliente bastante liviana (aplicación de escritorio en .Net como se puede conectar a otras aplicaciones tal vez sea necesaria en el futuro) para rastrear las RMA dentro de una empresa para los ingenieros, los ingenieros verán y actualice el estado en la aplicación, los clientes crearán/verán RMA en el sitio web.Uso correcto de las clases de repositorio/servicio

Deseo saber si mi uso previsto del servicio y las clases de repositorio son correctos. Un servicio web proporciona los datos en formato JSON desde el que puedo construir un objeto RMA. Este servicio web se accede por http://myRMA.com/repairs/2234/RMA.JSON

¿El código para obtener el número de RMA se encuentran dentro RMARepository clase con un método como GetRMA(int RMAId), y si el RMARepository seguir el patrón de diseño Singleton?

Considerando que si se actualiza el RMA, es decir, si el artículo está inspeccionando y esperando una aceptación de cotización, se completa en una clase de servicio, que llama a un depósito RMAR para enviar una actualización. ¿El IsExists(int RMAId) estaría en esta clase de servicio o estaría en el repositorio?

Estoy familiarizado con la Presentación - Aplicación (Lógica) - Acceso a datos - Datos (Base de datos) artitecture, y también con MVP. Pero me pregunto dónde caben las clases Service.

+0

Efectivamente, sé lo que necesito lograr, e incluso cómo lograrlo, pero necesito saber dónde trazar la línea para ubicar la funcionalidad en este estilo de arquitectura. – JonWillis

Respuesta

10

Las clases de repositorio solo se usan para acceder y almacenar información en la base de datos. No deberían tener otra lógica.

Los servicios se utilizan para obtener información de una fuente de datos (muy probablemente un repositorio), procesar la información y devolver el resultado a la persona que llama.

Una clase de servicio puede usar varios repositorios para lograr el resultado deseado. En esta capa también puede tener un sistema de eventos que puede permitir que un servicio realice acciones cuando otro servicio haya generado un evento.

Un ejemplo sería que el UserService llama al FeedService para crear un nuevo elemento de fuente RSS para cada usuario recién creado.

La capa Repositorio se puede representar mediante un ORM como nhibernate.

+0

Sería un comentario justo que el controlador/presentador en la capa de presentación que desea mostrar detalles de RMA llamaría a una clase de servicio que reenvía la llamada a uno o más repositorios para crear el objeto deseado. Es decir. La vista/controlador/modelo nunca toca las clases de repositorio. – JonWillis

+0

Sí. Esa es la forma correcta de hacerlo. Hace que sea más fácil extender aplicaciones y probarlas. – jgauffin

+0

@jguffin, Cheers, trabajo mal que en mi diseño. ¿Conoces algún material de lectura godo para lo que define un servicio, es decir, cuánto contenido debo poner en ellos? – JonWillis