บางครั้ง (ไม่ค่อย) ดูเหมือนว่าการสร้างฟังก์ชั่นที่ใช้พารามิเตอร์ที่เหมาะสมเป็นเส้นทางที่ดีที่สุด
การใช้พารามิเตอร์หลายตัวมักเป็นตัวบ่งชี้ที่ชัดเจนว่าคุณละเมิดSRPในวิธีนี้ วิธีการที่ต้องการพารามิเตอร์มากไม่น่าจะทำเพียงสิ่งหนึ่งที่ การ excpetion อาจเป็นฟังก์ชันทางคณิตศาสตร์หรือวิธีการกำหนดค่าซึ่งจำเป็นต้องมีพารามิเตอร์หลายตัวเช่นนี้ ฉันจะหลีกเลี่ยงพารามิเตอร์หลายตัวเนื่องจากมารหลีกเลี่ยงน้ำมนต์ ยิ่งคุณใช้พารามิเตอร์ในวิธีใดโอกาสที่วิธีนั้นจะซับซ้อน (เช่นกัน) ก็จะยิ่งสูงขึ้น ความซับซ้อนยิ่งขึ้นหมายถึง: ยากต่อการบำรุงรักษาและไม่พึงปรารถนา
อย่างไรก็ตามเมื่อฉันทำฉันรู้สึกเหมือนฉันมักจะเลือกการเรียงลำดับพารามิเตอร์แบบสุ่ม ฉันมักจะไปตาม "ลำดับความสำคัญ" โดยมีพารามิเตอร์ที่สำคัญที่สุดก่อน
ใน priniple คุณกำลังเลือกที่สุ่ม แน่นอนคุณอาจจะคิดว่าพารามิเตอร์มีความเกี่ยวข้องมากกว่าพารามิเตอร์B ; แต่นั่นอาจไม่ใช่กรณีสำหรับผู้ใช้ API ของคุณที่คิดว่าBเป็นพารามิเตอร์ที่เกี่ยวข้องมากที่สุด ดังนั้นแม้ว่าคุณจะมีความใส่ใจในการเลือกสั่งซื้อ - สำหรับคนอื่น ๆ มันอาจจะดูเหมือนสุ่ม
มีวิธีที่ดีกว่าในการทำเช่นนี้? มีวิธี "การปฏิบัติที่ดีที่สุด" ในการสั่งซื้อพารามิเตอร์ที่ช่วยเพิ่มความชัดเจนหรือไม่?
มีหลายวิธี:
a) ตัวเล็กตัวน้อย: อย่าใช้มากกว่าหนึ่งพารามิเตอร์
ข) ในขณะที่คุณไม่ได้ระบุสิ่งที่ภาษาที่คุณได้เลือกที่มีโอกาสที่คุณเลือกภาษาที่มีชื่อพารามิเตอร์ นี่คือน้ำตาล syntactic ที่ดีซึ่งช่วยให้คุณคลายความสำคัญของการเรียงลำดับของพารามิเตอร์:fn(name:"John Doe", age:36)
ไม่ใช่ทุกภาษาที่อนุญาตให้มีนิสัยดังกล่าว ถ้าเช่นนั้นจะเป็นอย่างไร
c) คุณสามารถใช้Dictionary / Hashmap / Associative Arrayเป็นพารามิเตอร์: เช่น Javascript จะอนุญาตสิ่งต่อไปนี้: fn({"name":"John Doe", age:36})
ซึ่งอยู่ไม่ไกลจาก (b)
d) แน่นอนถ้าคุณทำงานกับภาษาที่พิมพ์แบบคงที่เช่น Java คุณสามารถใช้Hashmapได้ แต่คุณจะพิมพ์ข้อมูลหลวม ๆ (เช่นเมื่อทำงานด้วยHashMap<String, Object>
) เมื่อพารามิเตอร์มีประเภทที่แตกต่างกัน (และจำเป็นต้องส่ง)
ตรรกะขั้นตอนต่อไปจะผ่านObject
(ถ้าคุณกำลังใช้ Java) ที่มีคุณสมบัติเหมาะสมหรือบางสิ่งบางอย่างที่มีน้ำหนักเบามากขึ้นเช่นstruct (ถ้าคุณเขียนเช่น C # หรือ C / C ++)
หลักการง่ายๆ:
1) กรณีที่ดีที่สุด - วิธีการของคุณไม่มีพารามิเตอร์เลย
2) กรณีที่ดี - วิธีการของคุณต้องการหนึ่งพารามิเตอร์
3) กรณีที่ทนได้ - วิธีการของคุณต้องการพารามิเตอร์สองตัว
4) กรณีอื่น ๆ ทั้งหมดควรจะ refactored
MessageBox.Show
หลายวิธีในการเรียก มองเข้าไปในที่เช่นกัน