Jadi saya punya pabrik yang membuat objek dari berbagai kelas. Semua kelas yang mungkin berasal dari nenek moyang abstrak. Pabrik memiliki file konfigurasi (sintaks JSON) dan memutuskan kelas mana yang akan dibuat, tergantung pada konfigurasi pengguna.
Untuk mencapai ini, pabrik menggunakan boost :: property_tree untuk penguraian JSON. Dia berjalan melalui ptree dan memutuskan objek konkret yang akan dibuat.
Namun, objek produk memiliki banyak bidang (atribut). Bergantung pada kelas konkret, objek memiliki sekitar 5-10 atribut, di masa depan mungkin bahkan lebih.
Jadi saya tidak yakin bagaimana seharusnya konstruktor dari objek tersebut. Saya dapat memikirkan dua solusi:
1) Konstruktor produk mengharapkan setiap atribut sebagai parameter, dengan demikian, konstruktor tersebut akan berakhir dengan 10+ parameter. Ini akan menjadi jelek dan mengarah pada baris kode yang panjang dan tidak dapat dibaca. Namun, keuntungannya adalah bahwa pabrik dapat mengurai JSON dan memanggil konstruktor dengan parameter yang benar. Kelas produk tidak perlu tahu bahwa itu telah dibuat karena konfigurasi JSON. Tidak perlu tahu ada JSON atau konfigurasi yang terlibat sama sekali.
2) Konstruktor produk hanya mengharapkan satu argumen, objek property_tree. Maka dapat mem-parsing informasi yang dibutuhkan. Jika ada informasi dalam konfigurasi yang hilang atau di luar batas, setiap kelas produk dapat bereaksi dengan benar. Pabrik tidak perlu tahu argumen apa yang dibutuhkan oleh beberapa produk. Pabrik juga tidak perlu tahu bagaimana harus bereaksi jika konfigurasi salah. Dan antarmuka konstruktor bersatu dan kecil. Tetapi, sebagai kerugian, produk perlu mengekstraksi informasi yang diperlukan dari JSON, sehingga, ia tahu bagaimana itu dibangun.
Saya cenderung lebih suka solusi 2). Namun, saya tidak yakin apakah ini pola pabrik yang baik. Entah bagaimana rasanya membiarkan produk tahu bahwa itu dibuat dengan konfigurasi JSON. Di sisi lain, produk baru dapat diperkenalkan dengan sangat sederhana.
Ada pendapat tentang itu?