Tôi đã suy nghĩ vấn đề này một thời gian và thấy mình liên tục tìm thấy sự cảnh báo và mâu thuẫn, vì vậy tôi hy vọng ai đó có thể đưa ra kết luận cho những điều sau:
Ngoại lệ ủng hộ mã lỗi
Theo như tôi biết, từ bốn năm làm việc trong ngành, đọc sách và blog, v.v ... cách tốt nhất hiện nay để xử lý lỗi là ném ngoại lệ, thay vì trả lại mã lỗi (không nhất thiết phải là mã lỗi, nhưng là loại đại diện cho một lỗi).
Nhưng - với tôi điều này dường như mâu thuẫn ...
Mã hóa giao diện, không triển khai
Chúng tôi mã hóa các giao diện hoặc trừu tượng để giảm khớp nối. Chúng tôi không biết hoặc muốn biết loại cụ thể và cách triển khai giao diện. Vậy làm thế nào chúng ta có thể biết những ngoại lệ nào chúng ta nên tìm cách nắm bắt? Việc thực hiện có thể ném ra 10 ngoại lệ khác nhau hoặc không thể ném ra. Khi chúng tôi bắt gặp một ngoại lệ chắc chắn chúng tôi sẽ đưa ra các giả định về việc thực hiện?
Trừ khi - giao diện có ...
Thông số kỹ thuật ngoại lệ
Một số ngôn ngữ cho phép các nhà phát triển tuyên bố rằng một số phương thức nhất định đưa ra một số ngoại lệ nhất định (ví dụ Java, sử dụng throws
từ khóa.) Từ quan điểm của mã gọi, điều này có vẻ ổn - chúng tôi biết rõ những ngoại lệ nào chúng tôi có thể cần nắm bắt.
Nhưng - điều này dường như gợi ý một ...
Trừu tượng rò rỉ
Tại sao một giao diện nên chỉ định ngoại lệ nào có thể được ném? Điều gì xảy ra nếu việc triển khai không cần ném ngoại lệ hoặc cần ném ngoại lệ khác? Ở cấp độ giao diện, không có cách nào để biết ngoại lệ nào mà việc triển khai có thể muốn ném.
Vì thế...
Để kết luận
Tại sao các ngoại lệ được ưa thích khi chúng dường như (trong mắt tôi) mâu thuẫn với các thực tiễn tốt nhất của phần mềm? Và, nếu mã lỗi quá tệ (và tôi không cần phải bán trên các tật xấu của mã lỗi), liệu có cách nào khác không? Trạng thái hiện tại (hoặc sắp có) của xử lý lỗi đáp ứng các yêu cầu của thực tiễn tốt nhất như đã nêu ở trên, nhưng không dựa vào mã gọi kiểm tra giá trị trả về của mã lỗi?