Saya memiliki basis kode besar dengan banyak lajang "anti-pola", kelas utilitas dengan metode statis, dan kelas membuat ketergantungan mereka sendiri menggunakan new
kata kunci. Itu membuat kode sangat sulit untuk diuji.
Saya ingin secara bertahap memigrasi kode ke wadah injeksi ketergantungan (dalam kasus saya ini Guice
, karena ini adalah GWT
proyek). Dari pemahaman saya tentang injeksi ketergantungan, semuanya atau tidak sama sekali. Entah semua kelas dikelola oleh Spring / Guice atau tidak ada. Karena basis kode besar, saya tidak dapat mengubah kode pada malam hari. Jadi saya perlu cara untuk melakukannya secara bertahap.
Masalahnya adalah ketika saya mulai dengan kelas yang perlu disuntikkan ke kelas lain, saya tidak bisa menggunakan yang sederhana @Inject
di kelas-kelas itu, karena kelas-kelas itu belum dikelola oleh wadah. Jadi ini menciptakan rantai panjang hingga kelas "atas" yang tidak disuntikkan di mana pun.
Satu-satunya cara saya melihat adalah membuat Injector
konteks / aplikasi tersedia secara global melalui singleton untuk saat ini, sehingga kelas-kelas lain dapat memperoleh kacang yang dikelola darinya. Tetapi itu bertentangan dengan ide penting untuk tidak mengungkapkan composition root
ke aplikasi.
Pendekatan lain adalah bottom-up: untuk memulai dengan kelas "tingkat tinggi", memasukkan mereka ke dalam wadah ketergantungan injeksi dan perlahan-lahan pindah ke kelas "lebih kecil". Tetapi kemudian saya harus menunggu lama, karena saya dapat menguji kelas-kelas yang lebih kecil yang masih tergantung pada global / statika.
Apa yang akan menjadi cara untuk mencapai migrasi bertahap seperti itu?
PS Pertanyaan Pendekatan bertahap untuk injeksi ketergantungan serupa dalam judul, tetapi tidak menjawab pertanyaan saya.