Estamos buscando crear un nuevo proyecto y queremos explorar utilizando los patrones de capa de repositorio y servicio, el objetivo es crear código ligeramente acoplado que sea totalmente comprobable mediante repositorios simulados.C# Patrón de diseño de capa de servicio
Consulte a continuación la idea de la arquitectura básica. Usaremos interfaces para describir los repositorios e inyectarlos en las capas de servicio para eliminar cualquier dependencia. Luego, usando autofac conectaremos los servicios en tiempo de ejecución.
public interface IOrderRepository
{
IQueryable<Order> GetAll();
}
public class OrderRepository : IOrderRepository
{
public IQueryable<Order> GetAll()
{
return new List<Order>().AsQueryable();
}
}
public class OrderService
{
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public IQueryable<Order> GetAll()
{
return _orderRepository.GetAll();
}
}
public class EmailService
{
public void SendEmails()
{
// How do I call the GetAll method from the order serivce
// I need to inject into the orderService the repository to use
}
}
Hay algunas preguntas que tenemos problemas para encontrar la mejor manera de avanzar.
1) En caso de que el servicio esté reproduciendo los métodos CRUD, ya que parece que estamos reproduciendo código sin ningún beneficio real. ¿O debería la interfaz de usuario llamar a los repositorios directamente?
2) Qué sucede cuando un servicio necesita llamar a otro servicio. En nuestro ejemplo anterior, si el servicio de correo electrónico necesita obtener todos los pedidos, ¿inyectamos el servicio de pedido en el servicio de correo electrónico?
la esperanza que esto tiene sentido
servicio de correo electrónico no debe estar al tanto de los servicios como OrderService, es necesario Mediador para trabajar tanto con los servicios de correo electrónico && orden de modo que se desacoplan – sll
¿Qué hace su servicio de pedidos ¿hacer? ¿Simplemente encapsular el OrderRepository? O hace más que eso, por el aspecto de tu código, parece una capa redundante. – gideon
Haría otra pregunta. ¿Es bueno exponer IQueryable fuera del límite del repositorio? Para mi no. Es una abstracción con goteras. –