Terkadang (jarang), tampaknya menciptakan fungsi yang membutuhkan jumlah parameter yang layak adalah rute terbaik.
Menggunakan beberapa parameter seringkali merupakan indikator yang jelas, bahwa Anda melanggar SRP dalam metode ini. Suatu metode, yang membutuhkan banyak parameter tidak mungkin hanya melakukan satu hal. Pengecualian dapat berupa fungsi matematika atau metode konfigurasi, di mana memang diperlukan beberapa parameter . Saya akan menghindari beberapa parameter karena iblis menghindari air suci. Semakin banyak parameter yang Anda gunakan dalam suatu metode, semakin tinggi peluangnya, bahwa metode itu terlalu rumit; semakin rumit berarti: lebih sulit untuk dipertahankan dan itu kurang diinginkan.
Namun, ketika saya melakukannya, saya merasa seperti saya sering memilih urutan parameter secara acak. Saya biasanya menggunakan "urutan kepentingan", dengan parameter terpenting terlebih dahulu.
Pada prinsipnya Anda memilih secara acak . Tentu saja Anda mungkin berpikir paramter A lebih relevan daripada parameter B ; tapi itu mungkin bukan kasus untuk pengguna API Anda, yang menganggap B adalah parameter yang paling relevan. Jadi, bahkan jika Anda penuh perhatian dalam memilih pemesanan - bagi orang lain itu bisa tampak acak .
Apakah ada cara yang lebih baik untuk melakukan ini? Apakah ada cara "praktik terbaik" memesan parameter yang meningkatkan kejelasan?
Ada beberapa jalan keluar:
a) Kasus sepele: Jangan gunakan lebih dari satu parameter.
b) Karena Anda tidak menentukan, bahasa apa yang Anda pilih, ada kemungkinan, bahwa Anda memilih bahasa dengan parameter bernama . Ini adalah gula sintaksis yang bagus yang memungkinkan Anda untuk melonggarkan pentingnya urutan parameter:fn(name:"John Doe", age:36)
Tidak setiap bahasa mengizinkan hal-hal seperti itu. Jadi bagaimana?
c) Anda dapat menggunakan Kamus / Hashmap / Asosiatif Array sebagai parameter: mis. Javascript akan mengizinkan hal berikut: fn({"name":"John Doe", age:36})
yang tidak jauh dari (b).
d) Tentu saja jika Anda bekerja dengan bahasa yang diketik secara statis seperti Java. Anda bisa menggunakan Hashmap , tetapi Anda akan kehilangan informasi jenis (misalnya ketika bekerja dengan HashMap<String, Object>
) ketika parameter memiliki tipe yang berbeda (dan perlu dilemparkan).
Langkah logis berikutnya adalah untuk melewatkan Object
(jika Anda menggunakan Java) dengan properti yang sesuai atau sesuatu yang lebih ringan seperti struct (jika Anda menulis misalnya C # atau C / C ++).
Aturan praktis:
1) Kasus terbaik - metode Anda tidak memerlukan parameter sama sekali
2) Kasus bagus - metode Anda membutuhkan satu parameter
3) Kasing yang dapat ditoleransi - metode Anda membutuhkan dua parameter
4) Semua kasus lain harus di refactored
MessageBox.Show
. Lihat itu juga.