สิ่งที่สำคัญที่สุดที่ควรจดจำคือสิ่งเหล่านี้เป็นแนวทางไม่ใช่กฎ
มีหลายกรณีที่วิธีการนั้นจะต้องมีการโต้แย้ง ลองนึกถึง+
วิธีการหาตัวเลขเช่น หรือadd
วิธีการรวบรวม
ในความเป็นจริงเราอาจโต้แย้งว่าการเพิ่มสองตัวเลขนั้นขึ้นอยู่กับบริบทเช่นในℤ 3 + 3 == 6
แต่ในℤ | 5 3 + 3 == 2
ดังนั้นผู้ดำเนินการเพิ่มเติมควรเป็นวิธีการในวัตถุบริบทที่รับสองอาร์กิวเมนต์แทน วิธีการเกี่ยวกับตัวเลขที่ใช้เวลาหนึ่งอาร์กิวเมนต์
ในทำนองเดียวกันวิธีการเปรียบเทียบวัตถุสองชิ้นจะต้องเป็นวิธีการหนึ่งของวัตถุที่รับอีกหนึ่งเป็นอาร์กิวเมนต์หรือวิธีการของบริบทการรับวัตถุสองชิ้นเป็นอาร์กิวเมนต์ดังนั้นจึงไม่สมเหตุสมผลที่จะมีวิธีการเปรียบเทียบกับ น้อยกว่าหนึ่งข้อโต้แย้ง
ที่กล่าวว่ามีสองสามสิ่งที่สามารถทำได้เพื่อลดจำนวนอาร์กิวเมนต์สำหรับวิธีการ:
- ทำให้เมธอดเล็กลง : บางทีถ้าเมธอดนั้นต้องการอาร์กิวเมนต์จำนวนมากมันกำลังทำอะไรมากเกินไป?
- สิ่งที่เป็นนามธรรมที่หายไป : หากการขัดแย้งมีความสัมพันธ์กันอย่างใกล้ชิดบางทีพวกมันอาจอยู่ด้วยกันและมีสิ่งที่เป็นนามธรรมที่คุณหายไป? (ตัวอย่างหนังสือแบบบัญญัติของ Canonical: แทนที่สองพิกัดส่งผ่าน
Point
วัตถุหรือแทนที่จะส่งชื่อผู้ใช้และอีเมลผ่านIdCard
วัตถุ)
- สถานะวัตถุ : หากต้องการอาร์กิวเมนต์หลายวิธีอาจจะเป็นส่วนหนึ่งของสถานะวัตถุ หากจำเป็นต้องใช้วิธีการบางอย่างเท่านั้น แต่ไม่ใช่วิธีอื่นอาจเป็นไปได้ว่าวัตถุกำลังทำอยู่มากเกินไปและควรเป็นวัตถุสองชิ้น
วิธีหนึ่งคือการแยกอาร์กิวเมนต์ไปยังคลาสใหม่ แต่นั่นจะนำไปสู่การระเบิดของคลาสอย่างแน่นอนหรือไม่
หากโมเดลโดเมนของคุณมีหลาย ๆ ประเภทรหัสของคุณก็จะจบลงด้วยวัตถุประเภทต่างๆ ไม่มีอะไรผิดปกติกับสิ่งนั้น
และคลาสเหล่านั้นมีแนวโน้มที่จะจบลงด้วยชื่อที่ละเมิดกฎการตั้งชื่อบางอย่าง (ลงท้ายด้วย "Data" หรือ "Info" ฯลฯ ) หรือไม่
หากคุณไม่สามารถหาชื่อที่เหมาะสมได้บางทีคุณอาจจัดกลุ่มข้อโต้แย้งมากเกินไปหรือน้อยเกินไป ดังนั้นคุณอาจมีเพียงบางส่วนของคลาสหรือคุณมีมากกว่าหนึ่งคลาส
อีกเทคนิคหนึ่งคือการทำให้ตัวแปรที่ใช้โดยหลายฟังก์ชั่นเป็นตัวแปรสมาชิกส่วนตัวเพื่อหลีกเลี่ยงการผ่านตัวแปรเหล่านั้น แต่นั่นเป็นการขยายขอบเขตของตัวแปรซึ่งอาจเป็นการเปิดให้ฟังก์ชั่นที่ไม่จำเป็นต้องใช้จริง
หากคุณมีกลุ่มของวิธีการทั้งหมดที่ใช้งานบนอาร์กิวเมนต์เดียวกันและกลุ่มของวิธีการอื่นที่ไม่มีพวกเขาอาจอยู่ในชั้นเรียนที่แตกต่างกัน
สังเกตว่าฉันใช้คำว่า "อาจจะ" บ่อยแค่ไหน? นั่นเป็นสาเหตุที่เป็นแนวทางไม่ใช่กฎ บางทีวิธีการของคุณที่มี 4 พารามิเตอร์นั้นดีมาก!