Не понимаю ли я интерфейсы?

Я поддерживаю проект ASP.NET MVC. В проекте у оригинального разработчика абсолютная масса интерфейсов. Например: IOrderService , IPaymentService , IEmailService , IResourceService . Меня смущает то, что каждый из них реализуется только одним классом. Другими словами:

OrderService : IOrderService
PaymentService : IPaymentService

Я всегда понимал, что интерфейсы используются для создания архитектуры, в которой компоненты могут быть легко заменены. Что-то вроде:

Square : IShape
Circle : IShape

Более того, я не понимаю, как они создаются и используются.Вот OrderService:

public class OrderService : IOrderService
{
    private readonly ICommunicationService _communicationService;
    private readonly ILogger _logger;
    private readonly IRepository<Product> _productRepository;

    public OrderService(ICommunicationService communicationService, ILogger logger,
        IRepository<Product> productRepository)
    {
        _communicationService = communicationService;
        _logger = logger;
        _productRepository = productRepository;
    }
}

Кажется, что эти объекты никогда не создавались напрямую, как в OrderService orderService = new OrderService () он всегда использует интерфейс. Я не понимаю, почему интерфейсы используются вместо класса, реализующего интерфейс, или как это вообще работает. Есть ли что-то важное, чего мне не хватает в интерфейсах, чего не раскрывают мои навыки работы с Google?

6
задан Nick 9 December 2011 в 14:44
поделиться