Tôi thường có phân cấp cuộc gọi trong đó tất cả các phương thức đều cần các tham số giống nhau. Nếu tôi không muốn đặt chúng ở cấp độ cá thể (thành viên của lớp) thì tôi luôn hỏi tôi nếu nó có ý nghĩa để kiểm tra tính hợp lệ của chúng trong mỗi phương pháp.Kiểm tra tham số lặp lại trong các hàm
Ví dụ:
public void MethodA(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do some thing unrelated to o
MethodB(o);
// Do some thing unrelated to o
}
public void MethodB(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do something with o
}
Nếu Method
A sử dụng các tham số, sau đó rõ ràng của nó, tôi phải kiểm tra tính hợp lệ ở đó và cũng trong MethdoB. Nhưng miễn là MethodA không làm gì hơn với o
hơn là cho nó vào MethodB
, là thực hành tốt để kiểm tra tính hợp lệ cũng trong MethodA
.
Vị trí kiểm tra cũng có trong MethodA
có thể là ngoại lệ ném trong phương thức mà callee đã gọi, điều đó thật tuyệt, nhưng có cần thiết không? Các cuộc gọi ngăn xếp sẽ nhà nước này cũng có. Có lẽ ý nghĩa của nó trong công cộng, nội bộ, được bảo vệ nhưng không theo phương pháp riêng tư?
Tôi đã kiểm tra null làm ví dụ, nhưng cũng xác thực chỉ mục hoặc xác thực phạm vi nằm trong câu hỏi tự, tuy nhiên tôi nghĩ có những hạn chế do sự nguy hiểm của mã dự phòng. Bạn nghĩ sao?
CẬP NHẬT
Qua câu trả lời của AakashM Tôi đã thấy rằng tôi đã để ít chính xác. MethodA
không chỉ các cuộc gọi MethodB
, nó cũng có những thứ khác nhưng không liên quan đến o
. Tôi đã thêm một ví dụ để làm rõ điều này. Cảm ơn AakashM.
Trường hợp giá trị đầu vào được tạo ra - có nghĩa là điều này ở người gọi? Ví dụ tôi đã ghi nhớ trong ví dụ của tôi là, phương pháp A và B đều có thể truy cập từ bên ngoài lớp và hợp pháp để gọi một trong cả hai (MethodA thực hiện tương tự cộng một chút so với MethodB) – HCL
Yep. Xem chỉnh sửa của tôi. – Mau