Để làm điều này đúng, trước tiên chúng ta phải xác định phụ thuộc và tiêm.
- Phụ thuộc: bất kỳ tài nguyên mà một hoạt động cần.
- Tiêm: truyền tài nguyên đó cho hoạt động, thường là đối số cho một phương thức.
Một ví dụ thô sơ sẽ là một phương thức thêm hai giá trị. Rõ ràng, phương pháp này cần các giá trị được thêm vào. Nếu chúng được cung cấp bằng cách chuyển chúng thành đối số, thì đây đã là một trường hợp tiêm phụ thuộc. Thay thế sẽ là thực hiện các toán hạng dưới dạng các thuộc tính hoặc các biến toàn cục. Bằng cách đó, không phụ thuộc sẽ được tiêm, phụ thuộc sẽ được trả trước bên ngoài.
Giả sử bạn sử dụng các thuộc tính thay thế và bạn đặt tên cho chúng là A và B. Nếu bạn thay đổi tên thành Op1 và Op2, bạn sẽ phá vỡ phương thức Add. Hoặc IDE của bạn sẽ cập nhật tất cả các tên cho bạn, vấn đề là phương pháp cũng cần được cập nhật vì nó có phụ thuộc vào tài nguyên bên ngoài.
Ví dụ này là cơ bản nhưng bạn có thể tưởng tượng các ví dụ phức tạp hơn trong đó phương thức thực hiện một thao tác trên một đối tượng như một hình ảnh hoặc nơi nó đọc từ một luồng tệp. Bạn có muốn phương pháp tiếp cận với hình ảnh, đòi hỏi nó phải biết nó ở đâu không? Không. Bạn có muốn phương thức tự mở tệp, yêu cầu nó biết nơi tìm tệp hoặc thậm chí để biết tệp sẽ được đọc từ tệp không? Không.
Vấn đề: giảm chức năng của một phương thức đối với hành vi cốt lõi của nó và tách rời phương thức khỏi môi trường của nó. Bạn có được cái đầu tiên bằng cách làm cái thứ hai, bạn có thể coi đây là định nghĩa của tiêm phụ thuộc.
Lợi ích: vì các phụ thuộc cho môi trường của phương thức đã được loại bỏ, các thay đổi đối với phương thức sẽ không ảnh hưởng đến môi trường và ngược lại. => Ứng dụng trở nên dễ dàng hơn để duy trì (sửa đổi).