ไม่มีเหตุผลใดที่ชัดเจนเป็นพิเศษว่าทำไมต้องใช้ไวยากรณ์ประเภทนี้ตั้งแต่แรก
โดยทั่วไปแล้วพยายามหลีกเลี่ยงการมีข้อโต้แย้งแบบบูลว่าระยะทางอาจดูไม่เจาะจง 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วิธีการโต้แย้งวิธีและอย่างไร