Trong những năm tôi đã dành lập trình và phát triển hệ thống, chỉ có hai tình huống tôi thấy mô hình được đề cập là hữu ích (trong cả hai trường hợp, áp lực cũng bao gồm ghi nhật ký ngoại lệ bị ném, tôi không coi việc bắt và null
trả lại đơn giản là một cách thực hành tốt ).
Hai tình huống như sau:
1. Khi ngoại lệ không được coi là một trạng thái ngoại lệ
Đây là khi bạn thực hiện một thao tác trên một số dữ liệu, có thể ném, bạn biết nó có thể ném nhưng bạn vẫn muốn ứng dụng của mình tiếp tục chạy, vì bạn không cần dữ liệu đã xử lý. Nếu bạn nhận được chúng, thật tốt, nếu bạn không, nó cũng tốt.
Một số thuộc tính tùy chọn của một lớp có thể xuất hiện trong tâm trí.
2. Khi bạn đang cung cấp triển khai thư viện mới (tốt hơn, nhanh hơn?) Bằng giao diện đã được sử dụng trong ứng dụng
Hãy tưởng tượng bạn có một ứng dụng sử dụng một loại thư viện cũ, không ném ngoại lệ nhưng bị null
lỗi. Vì vậy, bạn đã tạo một bộ điều hợp cho thư viện này, sao chép khá nhiều API gốc của thư viện và đang sử dụng giao diện mới (vẫn không ném) này trong ứng dụng của bạn và tự xử lý null
kiểm tra.
Một phiên bản mới của thư viện xuất hiện, hoặc có lẽ là một thư viện hoàn toàn khác cung cấp cùng chức năng, thay vì trả về null
s, sẽ ném ngoại lệ và bạn muốn sử dụng nó.
Bạn không muốn rò rỉ các ngoại lệ cho ứng dụng chính của mình, vì vậy bạn thay thế và đăng nhập chúng trong bộ điều hợp bạn tạo để bọc phụ thuộc mới này.
Trường hợp đầu tiên không phải là một vấn đề, đó là hành vi mong muốn của mã. Tuy nhiên, trong tình huống thứ hai, nếu ở mọi nơi null
giá trị trả về của bộ điều hợp thư viện thực sự có nghĩa là có lỗi, thì việc tái cấu trúc API để đưa ra một ngoại lệ và bắt nó thay vì kiểm tra null
có thể là (và thông thường là mã) là một ý tưởng tốt.
Cá nhân tôi chỉ sử dụng siêu áp lực cho trường hợp đầu tiên. Tôi chỉ sử dụng nó cho trường hợp thứ hai, khi chúng tôi không có ngân sách để làm cho phần còn lại của ứng dụng hoạt động với các ngoại lệ thay vì null
s.