2009-08-29 17 views
13

¿Cómo se podría implementar una capa de servicio en una arquitectura MVC? ¿Es un objeto que atiende todas las solicitudes a objetos comerciales subyacentes? ¿O se parece más a un objeto que sirve diferentes objetos de servicio que a su vez interactúan con objetos de negocios?Implementación de una capa de servicio en una arquitectura MVC

Así:

  1. Controlador -> Servicio -> getUserById(), o:

  2. Controlador -> ServiceManager -> getUserService() -> getUserById()

Además, si este último es más apropiado, ¿configuraría este objeto ServiceManager en un arranque? En otras palabras, registre los diferentes servicios que necesitará para su aplicación para el administrador de servicios en un arranque.

Si ninguno de los anteriores es apropiado, ¿qué me ayudaría a comprender mejor cómo debería implementarse una capa de servicio?

Gracias de antemano.

Respuesta

4

La forma en que leo esta pregunta, en realidad hay dos cosas que deberían ser respondió:

A) Preferiría dividir "Servicio" en "Servicio al cliente" y "Servicio de pedido", es decir, agrupado por conceptos de dominio.

B) En segundo lugar usaría la inyección de dependencia para obtener el servicio adecuado directamente donde lo necesito, así que básicamente estoy usando alt 1. La abstracción agregada en la alternativa 2 no proporciona ningún valor adicional para mí, ya que el contenedor IoC hace la parte importante

+0

Gracias por su respuesta krosenvold. Con respecto a su respuesta: A) Entendido y aceptado B) Veo lo que está diciendo acerca de la abstracción redundante. Pero como le comenté a Joel: me cuesta entender cómo IoC se implementaría en un entorno MVC. ¿Dónde tendría lugar esto? En el controlador? ¿Cómo ofrece esto valor adicional? No creo entender demasiado bien el principio de la IoC para comprender sus ventajas. ¿O también estamos hablando de configurarlo en un arranque? Si desea elaborar (tal vez con un breve ejemplo) lo agradecería mucho. Gracias. –

+0

El concepto clave para entender sobre la inyección de dependencia es que para que sea efectivo se usará en * la mayoría * de los lugares. Normalmente enganchas el contenedor IoC a un nivel infraestructural muy bajo y simplemente se filtra por todos lados. – krosenvold

2

Personalmente prefiero el n. ° 2, y sí, generalmente se configuraría en un programa de arranque, o las dependencias se resolverían utilizando algún tipo de contenedor IoC para darle las instancias concretas reales.

También me gustaría comentar, y sí entiendo que esto es probablemente más una preferencia personal. Trate de evitar usar el nombre "Capa de servicio" para estos objetos. referirse a ellos como repositorios u otra cosa. si usas el servicio, ese término se sobrecarga ... porque los desarrolladores son como "¿te refieres a un servicio de descanso o wcf?". confía en mí, lo hicimos con un proyecto reciente, y nos confundimos todo el tiempo cuando hablamos de dónde hacer cambios de código :-P

+0

Joel, gracias por su respuesta. Estoy de acuerdo con su objeción a nombrarlo Servicio. Acabo de enterarme de eso, pero en realidad fruncí el ceño un poco. Pero el concepto de la capa me atrajo. Estoy tratando de captar todo el concepto de inyección de dependencia también en este momento, pero no está del todo claro para mí cómo funciona esto. ¿Podría dar un breve ejemplo de cómo esto funcionaría en un entorno MVC? Quiero decir, ¿dónde se inyectaría qué objeto se menciona si, por ejemplo, se trata de recuperar objetos del usuario? Me cuesta entender ese concepto. Gracias de antemano. –

+0

créame cuando digo que entiendo cuando dice que está tratando de entender. Me tomó un poco averiguar cuándo/dónde usarlo :-) este cuadro de comentarios es demasiado pequeño para realmente entrar en él, pero sugiero que revise el ninject lib (http://ninject.org/).sus tutoriales van paso por paso y comienzan a presentar los conceptos. para resumir, se trata de separar la API de la implementación concreta. su código en el proyecto mvc debería funcionar en contra de su API, no de sus implementaciones específicas ... de esa manera usted puede cambiarlas más tarde al probar la unidad –

+3

Según Martin Fowler, una capa de servicio "define el límite de una aplicación con una capa de servicios que establece un conjunto de operaciones disponibles "En la línea de aplicaciones biz, estas operaciones suelen ser CRUD, pero no siempre. Así que no creo que la capa de servicio = repositorio. Cómo una verdadera capa de servicio (que me encanta) encaja en MVC sigue siendo un misterio para mí. Mi intuición es que la M en MVC debería reemplazarse por una S. A menos que los controladores formen la capa de servicio de la que estoy hablando. Supongo que así es como la mayoría de la gente lo hace. Pero, ¿deberían los controladores definir los límites de la aplicación? Estoy confundido ... –

Cuestiones relacionadas