2010-11-12 27 views
5

Estoy diseñando una aplicación asp.net mvc que utiliza una capa de servicio. ¿Qué pasa si tenemos un servicio que depende de otro servicio? Para, ejemplo, supongamos que tenemos el siguiente modelo:Interdependencia de capa de servicio

class UserService : IUserService 
{ 
    //implementation requires IEmailService 
}  

Claro, el EmailService aplicación concreta puede ser inyectado en el constructor de UserService, pero a mi entender, una capa de servicio debe mediar entre la interfaz de usuario y el modelo de dominio, que es como una fachada. Definiría otra capa de tal manera que UserService dependa de IUserModule e IEmailModule, de esta forma podríamos romper la dependencia entre servicios, servicios que dependen de una capa más baja (en mi caso, capa de módulos). ¿Es un enfoque correcto?

Respuesta

6

Dentro de una arquitectura común DDD encontrará dos tipos de servicios Servicios de dominio (cuyas operaciones comerciales coordinadas entre entidades) y servicios de aplicaciones (que dependen de los servicios de dominio, contienen tareas relacionadas con la aplicación y no para el negocio lógica, por ejemplo, exportar a PDF es una tarea de aplicación. Aplicar un descuento es una tarea de lógica de negocios).

Así que si solo tiene un tipo de servicio, que supongo cubre ambas responsabilidades. es totalmente válido para tener interdependencias.

alt text

1

Claro, el EmailService aplicación concreta se puede inyectar en el constructor de UserService, pero a mi entender, una capa de servicio debe mediar entre la interfaz de usuario y el dominio Modelo

Bueno, es un contrato entre a los lados, no necesariamente UI y Modelo de Dominio, pero comúnmente.

es como una fachada.

Sí, un buen servicio presenta una bonita fachada que también representa el rendimiento.

esta manera podríamos romper la dependencia entre los servicios, siendo dependiente de una capa inferior (en mi caso la capa de módulo) servicios. ¿Es un enfoque correcto?

¿Qué significa módulo para usted? ¿Es IEmailService un servicio o un módulo para ti? Parece correcto crear Facade en su caso para su servicio. Pero proporciona poca información sobre su sistema y su intención y sus desafíos/prioridades arquitectónicos.

+0

Falcon, el módulo contiene reglas de negocio e interacción con la capa de repositorio. – Markus

-4

La inyección de dependencia es algo que se debe evitar, ya que aumenta el acoplamiento y la complejidad de una ilusión de flexibilidad. MVC también es algo a reconsiderar antes de comenzar su desarrollo porque no es bueno para nada más que simples aplicaciones que realizan operaciones CRUD. Web Forms es una plataforma más probada y es mejor para más aplicaciones utilizables.

+0

"La inyección de dependencia es algo que debe evitar ya que aumenta el acoplamiento y la complejidad para una ilusión de flexibilidad". ¿Qué? – kyoryu

+0

Mitch, ¿sabes en absoluto qué es Dependency Injection o MVC y cómo usarlo? – Falcon

+0

-1: Investiga un poco antes de aconsejarte "evitar" algo. Tu respuesta se enfrenta a 180 grados de la realidad. –

Cuestiones relacionadas