2011-01-27 13 views

Respuesta

14

La capa de servicio debe contener operaciones comerciales y debe estar desacoplada de la capa de acceso a datos (repositorios). La capa de servicio expone las operaciones comerciales que podrían estar compuestas de múltiples operaciones CRUD. Esas operaciones CRUD son realizadas por los repositorios. Entonces, por ejemplo, podría tener una operación comercial que transfiriera cierta cantidad de dinero de una cuenta a otra y para realizar esta operación comercial primero deberá asegurarse de que la cuenta del remitente tenga suficientes provisiones, débito a la cuenta del remitente y acredite la cuenta del receptor. Las operaciones de servicio también podrían representar los límites de las transacciones de SQL, lo que significa que todas las operaciones CRUD elementales realizadas dentro de la operación comercial deberían estar dentro de una transacción y cualquiera de ellas debería tener éxito o revertirse en caso de error.

Con el fin de desacoplar la capa de servicio de la capa subyacente acceso a los datos se puede utilizar interfaces:

public class BankService 
{ 
    private readonly IAccountsRepository _accountsRepository; 
    public OrdersService(IAccountsRepository accountsRepository) 
    { 
     _accountsRepository = accountsRepository; 
    } 

    public void Transfer(Account from, Account to, decimal amount) 
    { 
     _accountsRepository.Debit(from, amount); 
     _accountsRepository.Credit(to, amount); 
    } 
} 
+0

ejemplo muy bueno :) – frennky

+0

De hecho, muy buen ejemplo. Una cosa más ... en este ejemplo, si envié una confirmación al usuario, tendría que devolver algo para el método de transferencia, ¿verdad? crearía un objeto que le diga al controlador que es un éxito. Esto permitiría hacer la validación dentro de la capa de servicio y luego devolver un objeto al controlador para decirle qué hacer a continuación. Este objeto podría representarse como una enumeración o datos de objeto. ¿Yo tengo razón? – Rushino

+0

@Rushino, exactamente. Puede utilizar dicho objeto para representar el éxito o el fracaso de la operación comercial, lo que le permite realizar adicionalmente alguna lógica de validación antes de continuar con las actualizaciones. –

Cuestiones relacionadas