Tôi có một chút bất đồng với một nhà phát triển có kinh nghiệm hơn về vấn đề này và tự hỏi người khác nghĩ gì về nó; môi trường của chúng tôi là Java, EJB 3, dịch vụ, v.v.
Mã tôi đã viết gọi một dịch vụ để có được mọi thứ và để tạo ra mọi thứ. Vấn đề tôi gặp phải là tôi có ngoại lệ con trỏ null không có ý nghĩa. Ví dụ, khi tôi yêu cầu dịch vụ tạo một đối tượng, tôi sẽ nhận lại null; Khi tôi cố gắng tìm kiếm một đối tượng có ID hợp lệ đã biết, tôi sẽ nhận được null. Tôi đã dành một chút thời gian để cố gắng tìm ra những gì sai trong mã của tôi; Vì tôi ít kinh nghiệm hơn nên tôi thường cho rằng mình đã làm sai điều gì đó, nhưng hóa ra lý do trả về null là bảo mật. Nếu hiệu trưởng người dùng sử dụng dịch vụ của tôi không có quyền phù hợp cho dịch vụ đích, thì đơn giản là nó sẽ trả về null. Hầu hết các dịch vụ khác ở đây cũng không được ghi chép lại rất tốt, vì vậy rõ ràng đây chỉ là điều bạn phải biết.
Điều này khá khó hiểu khi một nhà phát triển viết mã tương tác với dịch vụ. Nó sẽ có ý nghĩa hơn đối với tôi nếu dịch vụ là một ngoại lệ sẽ cho tôi biết rằng người dùng không có quyền thích hợp để tải thứ này hoặc tạo ra thứ đó; Sau đó tôi sẽ biết ngay tại sao dịch vụ của tôi không hoạt động như mong đợi.
Nhà phát triển có kinh nghiệm hơn đã viết dịch vụ này lập luận rằng việc yêu cầu dữ liệu không phải là một điều kiện lỗi và các ngoại lệ chỉ nên được đưa ra trong một điều kiện lỗi, không phải khi người dùng không có quyền truy cập vào dữ liệu. Dữ liệu này thường được tra cứu trong GUI và đối với những người dùng không có quyền phù hợp, những điều này chỉ đơn giản là "không tồn tại". Vì vậy, trong ngắn hạn: hỏi không sai, do đó không có ngoại lệ. Nhận các phương thức trả về null vì với những người dùng đó những thứ "không tồn tại". Tạo phương thức trả về null khi người dùng không được phép tạo thứ đó.
Đây có phải là bình thường và / hoặc thực hành tốt? Tôi thích sử dụng các ngoại lệ vì tôi thấy dễ dàng hơn nhiều để biết những gì đang xảy ra. Vì vậy, ví dụ tôi cũng thích ném NotFoundException nếu bạn yêu cầu một đối tượng có ID không hợp lệ, thay vì trả về null.