Tôi có một giao diện ProductService
với phương thức findByCriteria
. Phương pháp này có danh sách dài các tham số có thể vô hiệu hóa, như productName
, maxCost
, minCost
, producer
v.v.Có điều gì xấu trong việc khai báo lớp lồng nhau bên trong giao diện trong java không?
Tôi đã tái cấu trúc phương pháp này bằng cách giới thiệu Parameter Object. Tôi tạo ra lớp SearchCriteria
và bây giờ phương pháp chữ ký trông như thế này:
findByCriteria (SearchCriteria criteria)
tôi nghĩ rằng trường hợp của SearchCriteria
chỉ được tạo ra bởi người gọi phương pháp và chỉ được sử dụng bên trong findByCriteria
phương pháp, ví dụ:
void processRequest() {
SearchCriteria criteria = new SearchCriteria()
.withMaxCost (maxCost)
.......
.withProducer (producer);
List<Product> products = productService.findByCriteria (criteria);
....
}
và
List<Product> findByCriteria(SearchCriteria criteria) {
return doSmthAndReturnResult(criteria.getMaxCost(), criteria.getProducer());
}
Vì vậy, tôi không muốn tạo một lớp công khai riêng biệt cho SearchCriteria
và đặt nó bên trong ProductServiceInterface
:
public interface ProductService {
List<Product> findByCriteria (SearchCriteria criteria);
static class SearchCriteria {
...
}
}
Có điều gì xấu với giao diện này không? Bạn đặt SearchCriteria
ở đâu?
Bạn không cần đánh dấu SearchCriteria là tĩnh, tất cả các loại thành viên của giao diện hoàn toàn tĩnh (và công khai). – Oak