依赖反转原则 (DIP) 是一种架构原则,依据如下:
这意味着业务逻辑(例如订单服务)不应直接知道和使用具体的基础设施实现(例如,执行邮件发送的类),而应通过抽象(接口)进行工作,通过 DI 容器或手动方式进行注入。
C# 代码示例:
public interface IEmailSender { void Send(string to, string message); } public class SmtpEmailSender : IEmailSender { public void Send(string to, string message) { // 邮件发送实现 } } public class OrderService { private readonly IEmailSender _emailSender; public OrderService(IEmailSender emailSender) { _emailSender = emailSender; } public void PlaceOrder(string customer) { // 业务逻辑 _emailSender.Send(customer, "您的订单已下!"); } }
关键特性:
DIP只是通过构造函数进行的依赖注入吗?
不是。DIP是关于将抽象与实现分开的。依赖注入(Dependency Injection,DI)仅仅是实现DIP的一个工具。DIP也可以在没有DI容器的情况下手动实现,确保抽象和细节的分离。
如果您只有一个接口的实现,DIP是否仍然必要?
是的,即使只有一个实现,原则依然适用,因为可能会扩展。引入抽象为系统未来的需求变更做好准备,而无需修改高级代码。即使有一个接口的实现,低耦合也使得系统的测试和发展更加顺利。
使用工厂或服务定位器中的逻辑是否会破坏DIP?
会。如果工厂或服务定位器知道实现细节并动态绑定它们,而不使用客户端的接口,DIP将被破坏,尽管外部有抽象的存在。