Nếu có một phương pháp
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
nó nên được gọi là IsStuffDone()
?
Cả hai tên có thể bị người dùng hiểu sai: Nếu tên đó là DoStuff()
lý do tại sao nó trả về một boolean? Nếu tên là IsStuffDone()
không rõ liệu phương thức thực hiện một nhiệm vụ hay chỉ kiểm tra kết quả của nó.
Có một quy ước cho trường hợp này? Hoặc một cách tiếp cận khác, vì cách này được coi là thiếu sót? Ví dụ: trong các ngôn ngữ có tham số đầu ra, như C #, một biến trạng thái boolean có thể được truyền cho phương thức dưới dạng một và kiểu trả về của phương thức sẽ là void
.
EDIT: Trong xử lý ngoại lệ vấn đề cụ thể của tôi không thể ủy thác trực tiếp cho người gọi, vì phương thức này là một phần của việc triển khai giao diện. Do đó, người gọi không thể bị buộc tội đối phó với tất cả các ngoại lệ của các triển khai khác nhau. Nó không quen thuộc với những ngoại lệ đó. Tuy nhiên, người gọi có thể xử lý một ngoại lệ tùy chỉnh StuffHasNotBeenDoneForSomeReasonException
như được đề xuất trong câu trả lời và nhận xét của npinti .
boolean
thay vì gói hoặc vượt qua ngoại lệ gần như luôn luôn sai.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? Và để trả lời câu hỏi của bạn về các trường hợp ngoại lệ - Tôi sẽ để người gọi xử lý chúng hoặc bắt chúng và sau đó ném một ngoại lệ tùy chỉnh có nghĩa là "phương pháp này không thực hiện công việc của nó". Chia sẻ và tận hưởng.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Làm tương tự với các ngoại lệ (tùy chỉnh?) Sẽ phức tạp hơn vô ích.