นี่ไม่ใช่รายการที่ละเอียดถี่ถ้วน แต่พิจารณาปัจจัยต่อไปนี้บางอย่างเมื่อตัดสินใจว่าวัตถุควรถูกส่งผ่านไปยังเมธอดเป็นอาร์กิวเมนต์:
วัตถุนั้นไม่เปลี่ยนรูปหรือไม่? ฟังก์ชั่น 'บริสุทธิ์' หรือไม่?
ผลข้างเคียงคือการพิจารณาที่สำคัญสำหรับการบำรุงรักษารหัสของคุณ เมื่อคุณเห็นโค้ดที่มีออบเจกต์ stateful ที่เปลี่ยนแปลงไม่ได้จำนวนมากที่ถูกส่งไปทั่วสถานที่นั้นรหัสนั้นมักจะเป็นสัญชาตญาณน้อยลง (เช่นเดียวกับที่ตัวแปรสถานะทั่วโลกมักจะไม่เข้าใจง่าย) และการดีบักมักจะยากขึ้น การบริโภค
ตามกฎของหัวแม่มือมีจุดมุ่งหมายเพื่อให้มั่นใจว่าวัตถุใด ๆ ที่คุณส่งไปยังวิธีการนั้นจะไม่สามารถเปลี่ยนแปลงได้อย่างชัดเจน
หลีกเลี่ยง (เท่าที่เป็นไปได้อย่างสมเหตุสมผล) ออกแบบโดยคาดว่าจะมีการเปลี่ยนแปลงสถานะอันเป็นผลมาจากการเรียกฟังก์ชัน - หนึ่งในข้อโต้แย้งที่แข็งแกร่งที่สุดสำหรับแนวทางนี้คือหลักการของความเชื่อมั่นน้อยที่สุด ; นั่นคือใครบางคนกำลังอ่านโค้ดของคุณและเห็นการโต้แย้งที่ส่งผ่านไปยังฟังก์ชั่นนั้นมีโอกาสน้อยที่จะคาดว่าสถานะของมันจะเปลี่ยนไปหลังจากฟังก์ชั่นกลับมา
มีวิธีการขัดแย้งกันอยู่กี่ข้อ?
วิธีการที่มีรายการอาร์กิวเมนต์ที่ยาวเกินไป (แม้ว่าอาร์กิวเมนต์เหล่านั้นส่วนใหญ่จะมีค่า 'เริ่มต้น') จะเริ่มดูเหมือนรหัสกลิ่น บางครั้งฟังก์ชั่นดังกล่าวมีความจำเป็นอย่างไรและคุณอาจพิจารณาการสร้างชั้นเรียนที่มีวัตถุประสงค์ที่จะทำหน้าที่เหมือนเป็นวัตถุพารามิเตอร์
วิธีนี้สามารถเกี่ยวข้องกับการทำแผนที่รหัสต้นแบบจำนวนเล็กน้อยเพิ่มเติมจาก 'แหล่งที่มา' ของคุณไปยังวัตถุพารามิเตอร์ของคุณ แต่นั่นค่อนข้างมีต้นทุนต่ำทั้งในแง่ของประสิทธิภาพและความซับซ้อนอย่างไรก็ตามมีข้อดีหลายประการในแง่ของการแยกชิ้นส่วน และวัตถุที่ไม่สามารถเปลี่ยนแปลงได้
วัตถุที่ส่งผ่านนั้นเป็นของ "เลเยอร์" ภายในแอปพลิเคชันของคุณหรือไม่ (ตัวอย่างเช่น ViewModel หรือเอนทิตี ORM)
คิดเกี่ยวกับการแยกความกังวล (SoC) บางครั้งถามตัวเองว่าวัตถุ "เป็น" ของเลเยอร์หรือโมดูลเดียวกันซึ่งมีวิธีการของคุณอยู่หรือไม่ (เช่นไลบรารี wrapper API ที่รีดด้วยมือหรือ Core Business Layer Layer ของคุณเป็นต้น) สามารถแจ้งได้ว่าควรส่งวัตถุนั้นจริงหรือไม่ วิธี.
SoC เป็นรากฐานที่ดีสำหรับการเขียนโค้ดแบบแยกส่วนที่สะอาด ตัวอย่างเช่นวัตถุเอนทิตี ORM (การจับคู่ระหว่างรหัสของคุณกับสคีมาฐานข้อมูลของคุณ) ไม่ควรมีการนำมาใช้ในเลเยอร์ธุรกิจของคุณหรือแย่กว่านั้นในการนำเสนอ / UI เลเยอร์ของคุณ
ในกรณีของการส่งผ่านข้อมูลระหว่าง 'เลเยอร์' การมีพารามิเตอร์ข้อมูลธรรมดาส่งผ่านไปยังเมธอดมักจะดีกว่าการส่งผ่านวัตถุจากเลเยอร์ 'ผิด' แม้ว่ามันอาจเป็นความคิดที่ดีที่จะมีโมเดลแยกต่างหากซึ่งมีอยู่ในเลเยอร์ 'ขวา' ที่คุณสามารถแมปลงบนแทน
ฟังก์ชันมีขนาดใหญ่เกินไปและ / หรือซับซ้อนเกินไปหรือไม่
เมื่อฟังก์ชั่นต้องการไอเท็มข้อมูลจำนวนมากมันอาจคุ้มค่าที่จะพิจารณาว่าฟังก์ชั่นนั้นมีหน้าที่รับผิดชอบมากเกินไปหรือไม่ ค้นหาโอกาสที่อาจเกิดขึ้นเพื่อ refactor โดยใช้วัตถุขนาดเล็กและฟังก์ชั่นที่สั้นลงง่ายขึ้น
ฟังก์ชันควรเป็นวัตถุคำสั่ง / แบบสอบถามหรือไม่
ในบางกรณีความสัมพันธ์ระหว่างข้อมูลและฟังก์ชั่นอาจจะปิด; ในกรณีดังกล่าวให้พิจารณาว่าCommand ObjectหรือQuery Objectนั้นเหมาะสมหรือไม่
การเพิ่มพารามิเตอร์วัตถุในวิธีการบังคับคลาสที่มีเพื่อนำมาใช้ใหม่ขึ้นอยู่กับการพึ่งพา?
บางครั้งอาร์กิวเมนต์ที่รัดกุมที่สุดสำหรับอาร์กิวเมนต์ "ข้อมูลเก่าแบบธรรมดา" ก็คือคลาสที่รับนั้นมีอยู่ในตัวเองเรียบร้อยแล้วและการเพิ่มพารามิเตอร์วัตถุให้กับหนึ่งในวิธีการของมันจะทำให้คลาสเกิดมลพิษ ทำให้เอนโทรปีที่มีอยู่แย่ลง)
คุณต้องการส่งผ่านวัตถุที่สมบูรณ์จริง ๆ หรือคุณต้องการเพียงส่วนเล็ก ๆ ของอินเทอร์เฟซของวัตถุนั้นหรือไม่
พิจารณาหลักการแยกส่วนต่อประสานด้วยความเคารพต่อฟังก์ชั่นของคุณเช่นเมื่อผ่านวัตถุมันควรจะขึ้นอยู่กับส่วนของส่วนต่อประสานของอาร์กิวเมนต์ที่มันต้องการฟังก์ชั่น