Không có bất kỳ lý do siêu rõ ràng nào là tại sao lại sử dụng loại cú pháp này ngay từ đầu.
Nói chung, cố gắng tránh có các đối số boolean mà ở khoảng cách có thể trông tùy ý. includeManagement
sẽ (rất có thể) ảnh hưởng đến kết quả rất nhiều. Nhưng đối số có vẻ như mang "trọng lượng nhỏ".
Việc sử dụng một enum đã được thảo luận, nó không chỉ trông giống như đối số "mang nhiều trọng lượng hơn", mà còn cung cấp khả năng mở rộng cho phương thức. Tuy nhiên, đây có thể không phải là giải pháp tốt nhất trong mọi trường hợp, vì tính năng của bạn ReturnEmployeeIds
sẽ phải mở rộng cùng với WhatToInclude
-enum (xem câu trả lời của NiklasJ ). Điều này có thể khiến bạn đau đầu sau này.
Xem xét điều này: Nếu bạn chia tỷ lệ WhatToInclude
-enum, nhưng không phải là ReturnEmployeeIds
-method. Sau đó, nó có thể ném một ArgumentOutOfRangeException
(trường hợp tốt nhất) hoặc trả lại một cái gì đó hoàn toàn không mong muốn ( null
hoặc trống List<Guid>
). Mà trong một số trường hợp có thể gây nhầm lẫn cho lập trình viên, đặc biệt nếu bạn ReturnEmployeeIds
đang ở trong thư viện lớp, nơi mã nguồn không có sẵn.
Người ta sẽ cho rằng WhatToInclude.Trainees
sẽ hoạt động nếu WhatToInclude.All
có, thấy rằng các thực tập sinh là một "tập hợp con" của tất cả.
Điều này không (tất nhiên), phụ thuộc vào cách ReturnEmployeeIds
thực hiện.
Trong trường hợp một đối số boolean có thể được truyền vào, thay vào đó tôi cố gắng chia nó thành hai phương thức (hoặc nhiều hơn, nếu cần), trong trường hợp của bạn; người ta có thể trích xuất ReturnAllEmployeeIds
, ReturnManagementIds
và ReturnRegularEmployeeIds
. Điều này bao gồm tất cả các cơ sở và hoàn toàn tự giải thích cho bất cứ ai thực hiện nó. Điều này cũng sẽ không có quy mô "mở rộng", được đề cập ở trên.
Vì chỉ có hai kết quả cho một cái gì đó có một đối số boolean. Thực hiện hai phương pháp, mất rất ít nỗ lực.
Ít mã hơn, hiếm khi tốt hơn.
Với điều này đã nói, có là một số trường hợp rõ ràng tuyên bố đối số cải thiện khả năng đọc. Xem xét ví dụ. GetLatestNews(max: 10)
. GetLatestNews(10)
là vẫn khá tự giải thích, tuyên bố rõ ràng về max
ý chí giúp làm sáng tỏ bất kỳ sự nhầm lẫn.
Và nếu bạn hoàn toàn phải có một đối số boolean, việc sử dụng không thể được suy ra bằng cách chỉ đọc true
hoặc false
. Sau đó tôi sẽ nói rằng:
var ids = ReturnEmployeeIds(includeManagement: true);
.. hoàn toàn tốt hơn và dễ đọc hơn:
var ids = ReturnEmployeeIds(true);
Vì trong ví dụ thứ hai, true
có thể có nghĩa là hoàn toàn bất cứ điều gì . Nhưng tôi sẽ cố gắng tránh tranh luận này.
boolean
đối số phương thức và làm thế nào?