ไม่มีเหตุผลใดที่ชัดเจนเป็นพิเศษว่าทำไมต้องใช้ไวยากรณ์ประเภทนี้ตั้งแต่แรก
โดยทั่วไปแล้วพยายามหลีกเลี่ยงการมีข้อโต้แย้งแบบบูลว่าระยะทางอาจดูไม่เจาะจง includeManagement
จะ (ส่วนใหญ่) จะส่งผลกระทบต่อผลอย่างมาก แต่ข้อโต้แย้งดูเหมือนว่าจะมี "น้ำหนักน้อย"
การใช้ enum ได้ถูกกล่าวถึงแล้วไม่เพียง แต่จะดูเหมือนว่าอาร์กิวเมนต์ "มีน้ำหนักมากขึ้น" แต่ยังช่วยให้สามารถปรับขนาดได้ตามวิธีการ อย่างไรก็ตามนี่อาจไม่ใช่วิธีแก้ปัญหาที่ดีที่สุดในทุกกรณีเนื่องจากวิธีการของคุณReturnEmployeeIds
จะต้องขยายขนาดไปพร้อมกับWhatToInclude
-enum (ดูคำตอบของNiklasJ ) อาจทำให้คุณปวดหัวในภายหลัง
พิจารณาสิ่งนี้: หากคุณปรับขนาดWhatToInclude
-enum แต่ไม่ใช่ReturnEmployeeIds
-method จากนั้นอาจโยนArgumentOutOfRangeException
(กรณีที่ดีที่สุด) หรือส่งคืนสิ่งที่ไม่ต้องการอย่างสมบูรณ์ ( null
หรือว่างเปล่าList<Guid>
) ซึ่งในบางกรณีอาจสร้างความสับสนให้โปรแกรมเมอร์โดยเฉพาะอย่างยิ่งหากคุณReturnEmployeeIds
อยู่ในไลบรารีคลาสซึ่งซอร์สโค้ดไม่พร้อมใช้งาน
หนึ่งจะคิดว่าWhatToInclude.Trainees
จะทำงานถ้าWhatToInclude.All
ไม่เห็นผู้ฝึกอบรมที่เป็น "ส่วนย่อย" ของทั้งหมด
สิ่งนี้ (แน่นอน) ขึ้นอยู่กับวิธี ReturnEmployeeIds
การนำไปใช้
ในกรณีที่มีการโต้แย้งบูลีนฉันพยายามที่จะแยกมันออกเป็นสองวิธี (หรือมากกว่านั้นถ้าจำเป็น) ในกรณีของคุณ หนึ่งอาจแยกReturnAllEmployeeIds
, และReturnManagementIds
ReturnRegularEmployeeIds
สิ่งนี้ครอบคลุมทุกฐานและสามารถอธิบายตนเองได้อย่างชัดเจนว่าใครก็ตามที่นำไปใช้ สิ่งนี้จะไม่มี "สเกล" ที่ออกใหม่ดังกล่าวข้างต้น
เนื่องจากมีเพียงสองผลลัพธ์สำหรับบางสิ่งที่มีอาร์กิวเมนต์บูลีน การใช้สองวิธีใช้ความพยายามน้อยมาก
รหัสน้อยกว่าไม่ค่อยดีกว่า
ด้วยวิธีนี้กล่าวว่ามีมีบางกรณีที่ประกาศอย่างชัดเจนว่าการโต้แย้งช่วยเพิ่มความสามารถในการอ่าน พิจารณาตัวอย่าง GetLatestNews(max: 10)
. GetLatestNews(10)
คือยังคงสวยอธิบายตนเองประกาศชัดเจนmax
จะช่วยให้ชัดเจนขึ้นใด ๆเกิดความสับสน
และถ้าคุณอย่างจะต้องมีการโต้แย้งแบบบูลซึ่งการใช้งานไม่สามารถสรุปได้โดยเพียงแค่การอ่านหรือtrue
false
จากนั้นฉันก็จะบอกว่า:
var ids = ReturnEmployeeIds(includeManagement: true);
.. ดีกว่าจริง ๆ และอ่านง่ายกว่า:
var ids = ReturnEmployeeIds(true);
เนื่องจากในตัวอย่างที่สองที่true
อาจหมายถึงอย่างแน่นอนอะไร แต่ฉันจะพยายามหลีกเลี่ยงข้อโต้แย้งนี้
boolean
วิธีการโต้แย้งวิธีและอย่างไร