C # Service Layer Design Pattern

Мы изучаем создание нового проекта и хотим изучить использование шаблонов уровня репозитория и сервиса, цель - создать слабосвязанный код, который можно полностью протестировать с помощью фиктивных репозиториев.

См. Ниже основную идею архитектуры. Мы будем использовать интерфейсы для описания репозиториев и внедрять их в уровни обслуживания, чтобы удалить любые зависимости. Затем с помощью autofac мы подключим службы во время выполнения.

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
    }
}

Есть несколько вопросов, по которым мы не можем найти наилучший способ продвижения вперед.

1) Если служба воспроизводит методы CRUD, возможно, мы воспроизводим код без реальной выгоды. Или пользовательский интерфейс должен вызывать репозитории напрямую?

2) Что происходит, когда службе необходимо вызвать другую службу. В нашем примере выше, если службе электронной почты необходимо получать все заказы, внедряем ли мы службу заказа в службу электронной почты?

Надеюсь, это имеет смысл

11
задан user1223218 21 February 2012 в 11:55
поделиться