Saya mencoba mencari tahu kapan harus menggunakan registri DIC / IoC untuk mengkonfigurasi perangkat lunak saya dan kapan harus menggunakan pabrik, bersama dengan alasan di balik kedua pendekatan tersebut.
Saya menggunakan StructureMap sebagai wadah DI saya (DIC), yang mudah dikonfigurasikan menggunakan pendaftar. Dalam DIC praktis semua objek yang terdaftar bersifat statis dalam arti, bahwa saya tidak perlu mengubah / menukar implementasi / instance pada saat runtime, setelah DIC dikonfigurasi dan mereka dikonfigurasi dalam DIC sebagai singleton. Namun, karena perangkat lunak saya (SW) akan berjalan pada perangkat yang berbeda, saya perlu memilih registri khusus perangkat tergantung pada perangkat yang menjalankan SW saya untuk mengkonfigurasi perangkat keras yang sesuai.
Karena pembangunan beberapa objek saya memerlukan pembacaan dalam file konfigurasi, saya menggunakan pabrik untuk mengembalikan instance ini ke DIC, untuk memisahkan pembacaan konfigurasi dari penciptaan objek. Saya mendaftarkan getter pabrik di DIC untuk jenis plugin yang sesuai.
Sekarang katakan saya memiliki jenis plugin IMotor
dengan jenis beton Motor1
dan Motor2
, yang harus ditangani oleh pabrik. Sekarang ada dua cara saya dapat memutuskan cara mengkonfigurasi perangkat saya:
- Saya meneruskan informasi tentang perangkat yang menjalankan SW ke
MotorFactory
dan mengembalikan motor yang benar, baikMotor1
atauMotor2
. Dalam hal ini logika untuk memutuskan ada di dalam Pabrik. - Saya mengkonfigurasi DIC sesuai dengan perangkat itu berjalan dan membuat dua pabrik
Motor1Factory
danMotor2Factory
, di mana satu menciptakanMotor1
dan yang lainnyaMotor2
. Dalam hal ini saya akan memiliki entri registri yang berbedaIMotor
di dalam pendaftar khusus perangkat yang menggunakan salah satuMotor1Factory
atauMotor2Factory
.
Sekarang pertanyaan saya adalah: Mana dari dua metode ini yang lebih disukai dan mengapa? Bagi saya, sepertinya kasus pertama tidak lurus ke depan dan berbelit-belit, karena saya menyebarkan logika yang memutuskan jenis apa yang akan dipakai di seluruh basis kode. Sedangkan dalam kasus kedua saya secara efektif mengalikan jumlah pabrik dalam kode saya, karena saya akan membutuhkan pabrik untuk (hampir) setiap jenis beton. Menjadi lebih membingungkan bagi saya, ketika pabrik-pabrik abstrak ditambahkan ke dalam campuran.
Jadi sekali lagi: Kapan saya harus menggunakan satu metode atau yang lain? Dan yang lebih penting: Apa indikator yang baik untuk memutuskan jalan mana yang harus ditempuh?