Trong khi tôi bán đồng ý với bạn với ví dụ DB, một trong những điều lớn mà tôi thấy hữu ích khi sử dụng DI là giúp tôi kiểm tra lớp tôi xây dựng trên cơ sở dữ liệu.
Đây là ví dụ ...
Bạn có cơ sở dữ liệu của mình.
Bạn có mã của bạn có thể truy cập cơ sở dữ liệu và trả về đối tượng
Bạn có các đối tượng lĩnh vực kinh doanh mà phải mất đối tượng mục trước và làm một số logic với họ.
Nếu bạn hợp nhất quyền truy cập dữ liệu với logic miền doanh nghiệp của mình, đối tượng miền của bạn có thể trở nên khó kiểm tra. DI cho phép bạn tiêm các đối tượng truy cập dữ liệu của riêng bạn vào miền của bạn để bạn không phụ thuộc vào cơ sở dữ liệu để thử nghiệm hoặc có thể trình diễn (chạy bản demo nơi một số dữ liệu được lấy từ xml thay vì cơ sở dữ liệu).
Tóm tắt các thành phần và khung bên thứ 3 như thế này cũng sẽ giúp bạn.
Ngoài ví dụ thử nghiệm, có một vài nơi DI có thể được sử dụng thông qua phương pháp Thiết kế theo Hợp đồng. Bạn có thể tìm thấy nó thích hợp để tạo ra một công cụ xử lý các loại gọi các phương thức của các đối tượng mà bạn đang tiêm vào nó. Trong khi nó có thể không thực sự "xử lý nó" nó chạy các phương pháp có thực hiện khác nhau trong từng đối tượng bạn cung cấp.
Tôi đã xem ví dụ về điều này trong đó mỗi đối tượng miền doanh nghiệp có chức năng "Lưu" được gọi sau khi được tiêm vào bộ xử lý. Bộ xử lý đã sửa đổi thành phần với thông tin cấu hình và Lưu xử lý trạng thái chính của đối tượng. Về bản chất, DI bổ sung cho việc thực hiện phương pháp đa hình của các đối tượng phù hợp với Giao diện.
Tôi thích tất cả các lý do của bạn cho đến nay ... Tôi hiểu rằng phần lớn các lập trình viên dày dạn kinh nghiệm là "nhận" DI. Theo tôi hiểu, DI là về chất lượng. Chúng tôi, là người lập trình, muốn tạo ra mức phần mềm cao nhất mà chúng tôi có thể - và thử nghiệm nó giúp ích. Tôi đã viết ALOT mã trong những năm qua, và tôi rất vui khi nói rằng 10 năm trước, hơn 50% số đó vẫn đang chạy .. và không có DI. Có lẽ điều đó giúp bạn hiểu tại sao tôi lại dành chút thời gian cho DI? – CodeMonkey
Rõ ràng DI là mới tương đối nói. Vì vậy, tất nhiên bạn có thể viết phần mềm chất lượng cao mà không có nó - nhưng với sự tiến bộ của những thứ như khuôn khổ kiểm tra và TDD, DI có thể làm cho nó dễ dàng hơn nhiều để viết các bài kiểm tra cũng như viết mã được duy trì cho tương lai (khớp nối). – digiarnie