Trong nhiều bài viết trên web, các thuật ngữ Inversion of Control and Dependency Inversion Nguyên tắc dường như được trộn lẫn và được sử dụng như các từ đồng nghĩa (sự nhầm lẫn thêm được thực thi bởi các công cụ được gọi là "DI-Container" và "IoC-Container"). Một bài viết trên Wikipedia thực hiện một công việc tuyệt vời khi cố gắng giải thích rằng IoC không giống như DI:
đảo ngược điều khiển (IoC) mô tả một thiết kế trong đó các phần được viết tùy chỉnh của chương trình máy tính nhận luồng điều khiển từ một thư viện chung, có thể sử dụng lại
Vì vậy, DIP là về việc các mô-đun của bạn phụ thuộc vào trừu tượng hơn là triển khai cụ thể.
Và IoC là về việc trao quyền kiểm soát luồng chương trình của bạn cho một mô-đun riêng biệt. Và một trong những điều bạn có thể có mô-đun này làm là giải quyết các phụ thuộc khi chạy.
Sự khác biệt này có vẻ công bằng, nhưng tôi chưa bao giờ thấy ai đề cập đến bất kỳ ứng dụng nào khác của nguyên tắc IoC ngoài việc giải quyết phụ thuộc. Định nghĩa Wikipedia khá rộng và có vẻ như bạn có thể làm được nhiều hơn thế với một mô-đun có thể thực hiện các cuộc gọi vào mã tùy chỉnh của bạn dựa trên cấu hình của nó và một số logic bên trong.
Vì vậy, đây là một số câu hỏi mà tôi chưa thể tìm ra:
- Mối quan hệ thực tế giữa IoC và DIP là gì? Có phải IoC luôn đóng vai trò là phương tiện để thực hiện DIP?
- Tại sao các công cụ để giải quyết sự phụ thuộc được gọi là cả DI- và IoC-container? Điều này ngụ ý rằng DI và IoC là cùng một thứ.
Lưu ý : Câu hỏi này không phải là một bản sao của Sự khác biệt giữa DI và IoC là gì , bởi vì câu hỏi sau hỏi về Dependency Injection, không phải Dependency Inversion.