Ketika saya melihat daftar parameter yang panjang, pertanyaan pertama saya adalah apakah fungsi atau objek ini bekerja terlalu banyak. Mempertimbangkan:
EverythingInTheWorld earth=new EverythingInTheWorld(firstCustomerId,
lastCustomerId,
orderNumber, productCode, lastFileUpdateDate,
employeeOfTheMonthWinnerForLastMarch,
yearMyHometownWasIncorporated, greatGrandmothersBloodType,
planetName, planetSize, percentWater, ... etc ...);
Tentu saja contoh ini sengaja konyol, tetapi saya telah melihat banyak program nyata dengan contoh hanya sedikit kurang konyol, di mana satu kelas digunakan untuk menampung banyak hal yang hampir tidak terkait atau tidak terkait, tampaknya hanya karena program pemanggil yang sama membutuhkan keduanya atau karena programmer kebetulan memikirkan keduanya pada saat yang bersamaan. Terkadang solusi yang mudah adalah dengan memecah kelas menjadi beberapa bagian yang masing-masing melakukan tugasnya sendiri.
Sedikit lebih rumit adalah ketika sebuah kelas benar-benar perlu menangani banyak hal logis, seperti pesanan pelanggan dan informasi umum tentang pelanggan. Dalam kasus ini, buat kelas untuk pelanggan dan kelas untuk pesanan, dan biarkan mereka berbicara satu sama lain jika perlu. Jadi, alih-alih:
Order order=new Order(customerName, customerAddress, customerCity,
customerState, customerZip,
orderNumber, orderType, orderDate, deliveryDate);
Kami dapat memiliki:
Customer customer=new Customer(customerName, customerAddress,
customerCity, customerState, customerZip);
Order order=new Order(customer, orderNumber, orderType, orderDate, deliveryDate);
Meskipun tentu saja saya lebih suka fungsi yang hanya mengambil 1 atau 2 atau 3 parameter, terkadang kita harus menerima bahwa, secara realistis, fungsi ini membutuhkan banyak, dan jumlah itu sendiri tidak benar-benar menciptakan kerumitan. Sebagai contoh:
Employee employee=new Employee(employeeId, firstName, lastName,
socialSecurityNumber,
address, city, state, zip);
Ya, itu sekumpulan bidang, tapi mungkin yang akan kita lakukan dengan mereka adalah menyimpannya ke catatan database atau melemparkannya ke layar atau semacamnya. Sebenarnya tidak banyak pemrosesan di sini.
Ketika daftar parameter saya menjadi panjang, saya lebih suka jika saya dapat memberikan field tipe data yang berbeda. Seperti ketika saya melihat fungsi seperti:
void updateCustomer(String type, String status,
int lastOrderNumber, int pastDue, int deliveryCode, int birthYear,
int addressCode,
boolean newCustomer, boolean taxExempt, boolean creditWatch,
boolean foo, boolean bar);
Dan kemudian saya melihatnya disebut dengan:
updateCustomer("A", "M", 42, 3, 1492, 1969, -7, true, false, false, true, false);
Saya khawatir. Melihat panggilan itu, sama sekali tidak jelas apa arti semua nomor, kode, dan bendera samar ini. Ini hanya meminta kesalahan. Seorang programmer mungkin dengan mudah bingung tentang urutan parameter dan secara tidak sengaja mengganti dua, dan jika mereka adalah tipe data yang sama, kompiler akan menerimanya. Saya lebih suka memiliki tanda tangan di mana semua hal ini adalah enum, jadi panggilan lewat dalam hal-hal seperti Type.ACTIVE daripada "A" dan CreditWatch.NO daripada "false", dll.