【发布时间】:2011-12-09 14:44:19
【问题描述】:
我正在维护一个 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() 中它总是使用接口。我不明白为什么使用接口而不是实现接口的类,或者它是如何工作的。关于我的谷歌技能没有发现的界面,我是否缺少一些重要的东西?
【问题讨论】:
-
也许这个想法是使用接口,以便业务对象可以用简单的单元测试代替(但从来没有那么远)?
-
如果一个接口只由一个类实现,这似乎有点矫枉过正。也许这是为一个从未到来的未来而设计?
-
通过说“我感到困惑的是这些中的每一个都仅由单个类实现”您指的是:“公共类 OrderService : IOrderService”吗?如果是这样,项目中是否有很多地方构造函数有Ilogger或其他接口作为参数?
-
@ChrisW 是的,它在项目中的任何地方都这样做
-
那么他似乎在做一件很正常的事情,使用 IoC 容器进行构造函数注入。如果您检查 global.asax,您可能会找到容器的设置代码和绑定代码。