ฉันจะบอกว่ายึดติดกับวิธีที่คุณเคยทำมาก่อน จำนวนพารามิเตอร์ในตัวอย่างของคุณไม่มากนัก แต่ทางเลือกอื่นน่ากลัวกว่ามาก
แผนที่ - มีประสิทธิภาพที่คุณพูดถึง แต่ปัญหาใหญ่กว่านี้คือ:
- ผู้โทรไม่รู้ว่าจะส่งอะไรถึงคุณโดยไม่ได้อ้างถึงสิ่ง
อื่น ... คุณมี javadocs ที่ระบุว่าใช้คีย์และ
ค่าอะไรหรือไม่? หากคุณทำ (ซึ่งดีมาก) การมีพารามิเตอร์จำนวนมากก็ไม่ใช่ปัญหาเช่นกัน
- กลายเป็นเรื่องยากมากที่จะยอมรับอาร์กิวเมนต์ประเภทต่างๆ คุณสามารถ จำกัด พารามิเตอร์อินพุตเป็นประเภทเดียวหรือใช้ Map <String, Object> และส่งค่าทั้งหมด ตัวเลือกทั้งสองนั้นน่ากลัวเกือบตลอดเวลา
วัตถุ Wrapper - นี่เป็นเพียงการย้ายปัญหาเนื่องจากคุณต้องเติมวัตถุ Wrapper ตั้งแต่แรก - แทนที่จะเป็นวิธีการของคุณโดยตรงมันจะไปที่ตัวสร้างของวัตถุพารามิเตอร์ การพิจารณาว่าการย้ายปัญหานั้นเหมาะสมหรือไม่ขึ้นอยู่กับการนำวัตถุดังกล่าวกลับมาใช้ใหม่ ตัวอย่างเช่น:
จะไม่ใช้มัน: จะใช้เพียงครั้งเดียวในการโทรครั้งแรกดังนั้นรหัสเพิ่มเติมจำนวนมากเพื่อจัดการกับ 1 บรรทัด ... ?
{
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);
}
อาจใช้มัน: ที่นี่มันสามารถทำอะไรได้อีกเล็กน้อย ขั้นแรกสามารถแยกตัวประกอบพารามิเตอร์สำหรับการเรียก 3 วิธี มันยังสามารถทำอีก 2 บรรทัดในตัวมันเอง ... มันจึงกลายเป็นตัวแปรสถานะในความหมาย ...
{
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);
}
- รูปแบบตัวสร้าง - นี่เป็นการต่อต้านรูปแบบในมุมมองของฉัน กลไกการจัดการข้อผิดพลาดที่พึงปรารถนาที่สุดคือการตรวจจับก่อนหน้านี้ไม่ใช่ในภายหลัง แต่ด้วยรูปแบบตัวสร้างการเรียกที่ขาดหายไป (โปรแกรมเมอร์ไม่คิดที่จะรวมไว้) พารามิเตอร์บังคับจะถูกย้ายจากเวลาคอมไพล์ไปเป็นรันไทม์ แน่นอนว่าถ้าโปรแกรมเมอร์ตั้งใจใส่ null หรือในสล็อตนั่นจะเป็นรันไทม์ แต่การตรวจจับข้อผิดพลาดบางอย่างก่อนหน้านี้ถือเป็นข้อได้เปรียบที่ใหญ่กว่ามากในการรองรับโปรแกรมเมอร์ที่ปฏิเสธที่จะดูชื่อพารามิเตอร์ของวิธีที่พวกเขากำลังเรียกใช้ ฉันคิดว่าเหมาะสมก็ต่อเมื่อต้องจัดการกับพารามิเตอร์ที่เป็นทางเลือกจำนวนมากและถึงอย่างนั้นประโยชน์ก็น้อยที่สุด ฉันต่อต้านผู้สร้าง "แบบแผน" เป็นอย่างมาก
สิ่งอื่น ๆ ที่ผู้คนลืมพิจารณาคือบทบาทของ IDE ในทั้งหมดนี้ เมื่อเมธอดมีพารามิเตอร์ IDE จะสร้างโค้ดส่วนใหญ่ให้คุณและคุณจะมีเส้นสีแดงเตือนคุณว่าคุณต้องจัดหา / ตั้งค่าอะไร เมื่อใช้ตัวเลือก 3 ... คุณจะสูญเสียสิ่งนี้ไปโดยสิ้นเชิง ตอนนี้ขึ้นอยู่กับโปรแกรมเมอร์แล้วว่าจะทำให้ถูกต้องและไม่มีตัวชี้นำใด ๆ ในระหว่างการเข้ารหัสและเวลารวบรวม ... โปรแกรมเมอร์ต้องทดสอบเพื่อหา
นอกจากนี้ตัวเลือกที่ 2 และ 3 หากใช้การแพร่กระจายในวงกว้างโดยไม่จำเป็นจะมีผลกระทบเชิงลบในระยะยาวในแง่ของการบำรุงรักษาเนื่องจากรหัสที่ซ้ำกันจำนวนมากที่สร้างขึ้น ยิ่งมีรหัสมากเท่าไหร่ก็ยิ่งมีการรักษามากขึ้นเท่านั้นก็ยิ่งมีการใช้เวลาและเงินมากขึ้นเพื่อรักษารหัสนั้น