Giả sử chúng ta có một phương thức foo(String bar)
chỉ hoạt động trên các chuỗi đáp ứng các tiêu chí nhất định; ví dụ, nó phải là chữ thường, không được để trống hoặc chỉ có khoảng trắng và phải khớp với mẫu [a-z0-9-_./@]+
. Các tài liệu cho phương pháp nêu các tiêu chí này.
Phương pháp nên từ chối bất kỳ và tất cả các sai lệch so với tiêu chí này, hay phương pháp nên tha thứ hơn về một số tiêu chí? Ví dụ: nếu phương thức ban đầu là
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
this.bar = bar;
}
Và phương pháp tha thứ thứ hai là
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
bar = bar.toLowerCase().trim().replaceAll(" ", "_");
if (!bar.matches(BAR_PATTERN_STRING) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
}
this.bar = bar;
}
Tài liệu nên được thay đổi để nói rằng nó sẽ được chuyển đổi và được đặt thành giá trị được chuyển đổi nếu có thể, hoặc phương pháp nên được giữ đơn giản nhất có thể và từ chối bất kỳ và tất cả các sai lệch? Trong trường hợp này, bar
có thể được đặt bởi người dùng của một ứng dụng.
Trường hợp sử dụng chính cho trường hợp này sẽ là người dùng truy cập các đối tượng từ kho lưu trữ bằng một mã định danh chuỗi cụ thể. Mỗi đối tượng trong kho lưu trữ nên có một chuỗi duy nhất để xác định nó. Các kho lưu trữ này có thể lưu trữ các đối tượng theo nhiều cách khác nhau (máy chủ sql, json, xml, nhị phân, v.v.) và vì vậy tôi đã cố gắng xác định mẫu số chung thấp nhất phù hợp với hầu hết các quy ước đặt tên.
foo
chức năng nghiêm ngặt, nghiêm ngặt trong những đối số mà nó chấp nhận và có chức năng trợ giúp thứ hai có thể cố gắng "làm sạch" một đối số được sử dụng foo
. Theo cách này, mỗi phương thức có ít việc phải làm hơn và chúng có thể được quản lý và tích hợp sạch hơn. Nếu đi xuống tuyến đường đó, có lẽ cũng sẽ hữu ích khi di chuyển khỏi một thiết kế ngoại lệ; Optional
thay vào đó, bạn có thể sử dụng một cái gì đó giống như , và sau đó có các hàm tiêu thụ foo
ngoại lệ ném nếu cần thiết.