2011-09-04 19 views
6

Sto lavorando a un'applicazione Web ASP.Net MVC 3 (EF 4.1) separata in livelli: Modelli, Archivi, Servizi, Controllori, ViewModels in alcuni casi e Visualizzazioni .Se una classe di servizio dell'entità chiama il servizio di un'altra entità o il suo repository

Ora la mia domanda è una delle migliori pratiche. Se una classe di servizio entità che ha bisogno di accedere a un'altra entità usa il suo servizio o il suo repository. Ad esempio, supponiamo che un metodo di servizio per l'entità A debba aggiornare l'entità B quando viene creato A. La classe di servizio di A dovrebbe utilizzare il repository o il livello di servizio di B? Entrambi sono possibili, ma qual è la migliore pratica? Personalmente, preferirei un servizio per accedere a un altro servizio. In questo modo, è come l'accesso a metodi più evoluti, per così dire.

risposta

1

Tendo a ripiegare su principi e pratiche di uso comune per questo tipo di decisioni; DRY (Do not Repeat Yourself) e KISS (Keep It Simple, Stupid) potrebbero essere applicabili qui.

A meno che non sia necessario ripetere una logica a causa dell'esclusione della classe di servizio dell'entità B, chiamerei il repository dell'entità B direttamente dalla classe di servizio dell'entità A.

È un dettaglio minore, ma significa che è coinvolta una classe in meno (ServiceClassA> RepositoryClassB anziché ServiceClassA> ServiceClassB> RepositoryClassB) che rende la soluzione più semplice nella mia mente.

HTH

0

io preferirei chiamare tra le classi di servizio, perché potrebbe essere necessario anche un po 'di logica di business da un altro servizio. Ma fai attenzione a evitare le dipendenze circolari. Ti sto raccomandando di usare l'iniezione di dipendenza che ti aiuterà ad evitare possibili dipendenze circolari. Considerare inoltre di creare interfacce per le classi di servizio e utilizzare questa interfaccia dalle classi client (passare l'implementazione concreta al costruttore).

Allora la vostra SericesA sarà:

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

ServiceB che dipende 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 
    } 
} 
Problemi correlati