2011-09-04 11 views
6

Estoy trabajando en una aplicación web ASP.Net MVC 3 (EF 4.1) se separó en capas: Modelos, repositorios, servicios, controladores, ViewModels en algunos casos, y Vistas .En caso de una llamada de clase de servicio entidad de servicio de otra entidad o de su repositorio

Ahora mi pregunta es una de las mejores prácticas. Debería una clase de servicio de entidad que necesita acceso a otra entidad usar su servicio o su repositorio. Por ejemplo, supongamos que un método de servicio para la entidad A necesita actualizar la entidad B cuando se crea A. ¿Debería la clase de servicio de A usar el repositorio de B o la capa de servicio? Ambos son posibles, pero ¿cuál es la mejor práctica? Personalmente, preferiría un servicio para acceder a otro servicio. De esa forma, como acceso a métodos más evolucionados, por así decirlo.

Respuesta

1

que tienden a caer de nuevo en los principios y prácticas de este tipo de decisiones de uso común; DRY (No repetir) y KISS (Keep it Simple, Stupid) pueden ser aplicables aquí.

A menos que tenía que repetir algo de lógica, como resultado de pasar por la clase de servicio de la entidad B, que yo llamaría repositorio de la entidad B directamente de la clase de servicio de la entidad A.

Es un detalle menor, pero significa que hay una clase menos involucrada (ServiceClassA> RepositoryClassB en lugar de ServiceClassA> ServiceClassB> RepositoryClassB) que hace que sea una solución más simple en mi mente.

HTH

0

yo preferiría llamar entre las clases de servicio, ya que es posible que tenga también algo de lógica de negocio de otro servicio. Pero tenga cuidado de evitar dependencias circulares. Te recomiendo que uses la inyección de dependencia que te ayudará a evitar posibles dependencias circulares. Ten en cuenta también a crear interfaces para sus clases de servicio y el uso de esta interfaz de sus clases de cliente (pase la aplicación concreta al constructor).

Luego, su SericesA se verá:

class ServiceA : IServiceA 
{ 
    public ResultA Method1() { //some logic }; 
    public void Method2() { //some logic }; 
} 

ServiceB que depende de ServcieA.

class ServiceB: IServiceB 
{ 
    private IServiceA _serviceA; 
    public ServiceB(IServiceA serviceA) 
    { 
     _serviceA = serviceA; 
    } 

    public ResultB Method() 
    { 
     var result = _serviceA.Method1(); 
     // get result from service A and create and return result for service B 
    } 
} 
Cuestiones relacionadas