La lógica comercial compleja por lo general entra en una capa de servicio. Un servicio puede depender de uno o más repositorios para realizar operaciones CRUD en sus modelos. Por lo tanto, una única operación de servicio que represente una operación comercial puede depender de múltiples operaciones simples. Entonces podría reutilizar esta capa de servicio en sus controladores y otras aplicaciones.
Obviamente, su servicio no debe depender de implementaciones de repositorio específicas. Para proporcionar un acoplamiento más débil entre la capa de servicio y los repositorios, podría usar interfaces. Aquí hay un ejemplo:
public interface IProductsRepository { }
public interface IOrdersRepository { }
...
public interface ISomeService
{
void SomeBusinessOperation();
}
public class SomeServiceImpl: ISomeService
{
private readonly IProductsRepository _productsRepository;
private readonly IOrdersRepository _ordersRepository;
public SomeServiceImpl(
IProductsRepository productsRepository,
IOrdersRepository ordersRepository
)
{
_productsRepository = productsRepository;
_ordersRepository = ordersRepository;
}
public void SomeBusinessOperation()
{
// TODO: use the repositories to implement the business operation
}
}
Ahora todo lo que queda es configurar su infraestructura DI para inyectar este servicio específico en su controlador.
public class FooController : Controller
{
private readonly ISomeService _service;
public FooController(ISomeService service)
{
_service = service;
}
public ActionResult Index()
{
// TODO: Use the business operation here.
}
}
Puede ver cómo las interfaces nos permiten proporcionar un acoplamiento débil entre las capas. Toda la plomería se realiza mediante el marco DI y todo es transparente y fácilmente comprobable por unidad.
Darin, Dentro de este contexto, ¿cuál es la mejor manera de acceder a varios repositorios de un solo servicio? También, ¿podría decirme cuál sería la solución para una IoC/DI? – Chandu
¡Gracias, Darin! –
Gracias por la explicación Darin – Chandu