Tôi có một cơ sở mã lớn với rất nhiều singletons "chống mẫu", các lớp tiện ích với các phương thức tĩnh và các lớp tạo ra các phụ thuộc của riêng chúng bằng new
từ khóa. Nó làm cho một mã rất khó kiểm tra.
Tôi muốn chuyển dần mã sang vùng chứa phụ thuộc (trong trường hợp của tôi Guice
, vì đó là một GWT
dự án). Từ hiểu biết của tôi về tiêm phụ thuộc, đó là tất cả hoặc không có gì. Tất cả các lớp được quản lý bởi Spring / Guice hoặc không. Vì cơ sở mã lớn nên tôi không thể chuyển đổi mã qua đêm. Vì vậy, tôi cần một cách để làm điều đó dần dần.
Vấn đề là khi tôi bắt đầu với một lớp cần được chèn vào các lớp khác, tôi không thể sử dụng một đơn giản @Inject
trong các lớp đó, vì các lớp đó chưa được quản lý bởi container. Vì vậy, điều này tạo ra một chuỗi dài lên đến các lớp "hàng đầu" không được tiêm ở bất cứ đâu.
Cách duy nhất tôi thấy là làm cho một Injector
bối cảnh / ứng dụng có sẵn trên toàn cầu thông qua một đơn vị trong thời điểm hiện tại, để các lớp khác có thể nhận được một hạt đậu được quản lý từ nó. Nhưng nó mâu thuẫn với ý tưởng quan trọng của việc không tiết lộ composition root
cho ứng dụng.
Một cách tiếp cận khác sẽ là từ dưới lên: để bắt đầu với các lớp "cấp cao", đưa chúng vào thùng chứa phụ thuộc và từ từ chuyển xuống các lớp "nhỏ hơn". Nhưng sau đó tôi phải chờ rất lâu, vì tôi có thể kiểm tra những lớp nhỏ hơn mà vẫn phụ thuộc vào toàn cầu / thống kê.
Điều gì sẽ là cách để đạt được di cư dần dần như vậy?
PS Câu hỏi Cách tiếp cận dần dần để tiêm phụ thuộc tương tự trong tiêu đề, nhưng nó không trả lời câu hỏi của tôi.