Saya akan mengatakan tetap dengan cara Anda melakukannya sebelumnya. Jumlah parameter dalam contoh Anda tidak banyak, tetapi alternatifnya jauh lebih mengerikan.
Peta - Ada hal efisiensi yang Anda sebutkan, tetapi masalah yang lebih besar di sini adalah:
- Penelepon tidak tahu apa yang harus dikirimkan kepada Anda tanpa mengacu pada sesuatu yang
lain ... Apakah Anda memiliki javadocs yang menyatakan dengan tepat kunci dan
nilai apa yang digunakan? Jika Anda melakukannya (yang bagus), maka memiliki banyak parameter juga tidak menjadi masalah.
- Menjadi sangat sulit untuk menerima tipe argumen yang berbeda. Anda dapat membatasi parameter input ke satu jenis, atau menggunakan Map <String, Object> dan memasukkan semua nilai. Kedua opsi tersebut seringkali mengerikan.
Objek pembungkus - ini hanya memindahkan masalah karena Anda perlu mengisi objek pembungkus di tempat pertama - alih-alih langsung ke metode Anda, ini akan menjadi konstruktor dari objek parameter. Untuk menentukan apakah memindahkan masalah itu tepat atau tidak tergantung pada penggunaan kembali benda tersebut. Contohnya:
Tidak akan menggunakannya: Ini hanya akan digunakan sekali pada panggilan pertama, jadi banyak kode tambahan untuk menangani 1 baris ...?
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
SomeObject i = obj2.callAnotherMethod(a, b, c, h);
FinalResult j = obj3.callAFinalMethod(c, e, f, h, i);
}
Dapat menggunakannya: Di sini, dapat melakukan sedikit lebih banyak. Pertama, ini dapat memfaktorkan parameter untuk 3 panggilan metode. itu juga dapat melakukan 2 baris lain dalam dirinya sendiri ... sehingga menjadi variabel keadaan dalam arti ...
{
AnObject h = obj.callMyMethod(a, b, c, d, e, f, g);
e = h.resultOfSomeTransformation();
SomeObject i = obj2.callAnotherMethod(a, b, c, d, e, f, g);
f = i.somethingElse();
FinalResult j = obj3.callAFinalMethod(a, b, c, d, e, f, g, h, i);
}
- Pola pembangun - ini adalah anti-pola menurut saya. Mekanisme penanganan kesalahan yang paling diinginkan adalah mendeteksi lebih awal, bukan nanti; tetapi dengan pola pembangun, panggilan yang hilang (programmer tidak berpikir untuk memasukkannya) parameter wajib dipindahkan dari waktu kompilasi ke waktu berjalan. Tentu saja jika programmer dengan sengaja memasukkan null atau semacamnya ke dalam slot, itu akan menjadi runtime, tetapi masih menemukan beberapa kesalahan sebelumnya adalah keuntungan yang jauh lebih besar untuk melayani programmer yang menolak untuk melihat nama parameter dari metode yang mereka panggil. Saya merasa itu hanya cocok ketika berhadapan dengan sejumlah besar parameter opsional , dan bahkan kemudian, manfaatnya paling sedikit. Saya sangat menentang "pola" pembangun.
Hal lain yang orang lupa pertimbangkan adalah peran IDE dalam semua ini. Ketika metode memiliki parameter, IDE menghasilkan sebagian besar kode untuk Anda, dan Anda memiliki garis merah yang mengingatkan Anda apa yang perlu Anda berikan / setel. Saat menggunakan opsi 3 ... Anda kehilangan ini sepenuhnya. Sekarang terserah programmer untuk melakukannya dengan benar, dan tidak ada isyarat selama pengkodean dan waktu kompilasi ... programmer harus mengujinya untuk mengetahuinya.
Selain itu, opsi 2 dan 3, jika diadopsi dengan penyebaran yang tidak perlu, memiliki implikasi negatif jangka panjang dalam hal pemeliharaan karena banyaknya kode duplikat yang dihasilkannya. Semakin banyak kode yang ada, semakin banyak yang harus dipelihara, semakin banyak waktu dan uang yang dihabiskan untuk memeliharanya.