Pertimbangkan modul yang bertanggung jawab untuk mem-parsing file dari jenis apa pun yang diberikan. Saya sedang berpikir untuk menggunakan pola strategi untuk mengatasi masalah ini seperti yang telah saya jelaskan di sini . Silakan merujuk ke posting terkait sebelum melanjutkan dengan pertanyaan ini.
Pertimbangkan kelas B yang membutuhkan konten file product.xml. Kelas ini perlu instantiate implementator beton yang sesuai dari antarmuka Parser untuk mem-parsing file XML. Saya dapat mendelegasikan Instansiasi pelaksana beton yang tepat untuk Pabrik sehingga kelas B "memiliki-a" Pabrik. Namun, kelas B kemudian akan "bergantung" pada Pabrik untuk instantiating pelaksana beton. Ini berarti bahwa konstruktor atau metode penyetel di kelas B perlu melewati Pabrik.
Oleh karena itu, Pabrik dan kelas B yang perlu mengurai file akan digabungkan satu sama lain. Saya mengerti bahwa saya mungkin benar-benar salah tentang apa pun yang telah saya jelaskan sejauh ini. Saya ingin tahu apakah saya dapat menggunakan injeksi ketergantungan dalam skenario di mana ketergantungan yang akan disuntikkan adalah Pabrik dan apa yang akan menjadi cara yang tepat untuk menerapkan ini sehingga saya dapat mengambil keuntungan dari bidang-bidang seperti mengejek Pabrik di unit test saya.
Saya pikir premis Anda agak bingung di sini, Anda berbicara tentang menyuntikkan pabrik, tetapi pola pabrik adalah pola kreatif yang tujuannya adalah untuk melakukan subset dari apa yang dilakukan kerangka kerja injeksi ketergantungan, ketika kerangka kerja DI tidak lazim pola ini adalah berguna karena alasan itu. Namun jika Anda memiliki kerangka kerja DI, Anda tidak lagi benar-benar membutuhkan pabrik karena kerangka kerja DI dapat memenuhi tujuan yang seharusnya dipenuhi oleh pabrik.
Yang mengatakan, izinkan saya menjelaskan sedikit tentang injeksi ketergantungan dan bagaimana Anda biasanya akan menggunakannya.
Ada berbagai cara untuk melakukan injeksi ketergantungan, tetapi yang paling umum adalah injeksi konstruktor, injeksi properti, dan DIContainer langsung. Saya akan berbicara mengenai injeksi konstruktor karena injeksi properti adalah pendekatan yang salah sebagian besar waktu (pendekatan yang tepat beberapa waktu), dan akses DIContainer tidak disukai kecuali ketika Anda benar-benar tidak dapat melakukan salah satu dari pendekatan lain.
Injeksi konstruktor adalah tempat Anda memiliki antarmuka untuk dependensi dan DIContainer (atau pabrik) yang mengetahui implementasi konkret untuk dependensi itu, dan di mana pun Anda membutuhkan objek yang bergantung pada antarmuka itu, pada saat konstruksi Anda menyerahkan implementasi dari pabrik ke Itu.
yaitu
Banyak kerangka kerja DI dapat menyederhanakan ini secara signifikan ke tempat DIContainer Anda akan memeriksa konstruktor UserRepository untuk antarmuka yang dikenal dengan implementasi konkret, dan secara otomatis akan menyerahkannya kepada Anda; teknik ini sering disebut Inversion of Control, meskipun DI dan IoC keduanya istilah yang dipertukarkan banyak dan memiliki perbedaan yang samar (jika ada).
Sekarang jika Anda bertanya-tanya bagaimana kode menyeluruh mengakses DIContainer, baik Anda dapat memiliki kelas statis untuk mengaksesnya atau apa yang lebih tepat adalah bahwa sebagian besar kerangka kerja DI memungkinkan Anda untuk membuat DIContainer baru, di mana ia sebenarnya hanya akan berperilaku sebagai bungkus ke kamus tunggal internal untuk jenis yang diketahuinya konkret untuk antarmuka yang diberikan.
Itu artinya, Anda dapat membuat DIContainer baru di mana saja yang Anda inginkan dalam kode dan secara efektif mendapatkan DIContainer yang telah Anda konfigurasikan untuk mengetahui hubungan antar muka dengan beton. Cara biasa menyembunyikan DIContainer dari bagian kode yang tidak boleh berinteraksi dengannya secara langsung adalah hanya memastikan hanya proyek yang diperlukan yang memiliki referensi ke kerangka kerja DI.
sumber
DIContainer
denganDbConnectionFactory
dan konsep masih berdiri bahwa Anda akan mengambil implementasi konkret dari DI / Pabrik / etc Anda dan menyerahkannya kepada konsumen jenis pada waktu konstruksi mereka.Anda dapat melewati pabrik melalui injeksi ketergantungan sama seperti Anda melewati apa pun, jangan biarkan situasi yang berulang membuat Anda bingung. Saya tidak tahu harus berkata apa lagi tentang mengimplementasikannya - Anda sudah tahu cara melakukan injeksi ketergantungan.
Saya menggunakan DI untuk menyuntikkan pabrik secara teratur.
sumber
Tidak ada yang salah dalam menyuntikkan pabrik. Ini adalah cara standar jika Anda tidak dapat memutuskan selama membangun objek 'induk' jenis ketergantungan apa yang akan Anda butuhkan. Saya pikir contoh akan menjelaskan yang terbaik. Saya akan menggunakan c # karena saya tidak tahu java.
sumber