Trung BìnhDesign Patterns iconDesign Patterns

Dependency Inversion Principle (DIP) là gì? Liên quan gì đến Dependency Injection?

DIP có hai quy tắc:

  1. module high-level không nên phụ thuộc module low-level, cả hai nên phụ thuộc abstraction
  2. abstraction không nên phụ thuộc detail, mà detail phụ thuộc abstraction

Ví dụ: UserService không nên new MySQLDatabase() trực tiếp mà nhận DatabaseInterface qua constructor — class UserService { constructor(private db: DatabaseInterface) {} }. Dependency Injection (DI) là cơ chế triển khai DIP: thay vì class tự tạo dependency, dependency được inject từ bên ngoài (qua constructor, setter, hoặc DI container như NestJS IoC).

Lợi ích: dễ swap implementation (đổi từ MySQL sang PostgreSQL không cần sửa UserService), dễ mock trong unit test. DIP là nền tảng của các framework như NestJS, Spring, Angular.

Xem toàn bộ Design Patterns cùng filter theo level & chủ đề con.

Mở danh sách Design Patterns