Tengo una interfaz ProductService
con el método findByCriteria
. Este método tenía una larga lista de parámetros que aceptan nulos, como productName
, maxCost
, minCost
, producer
y así sucesivamente.¿Hay algo malo en declarar la clase anidada dentro de la interfaz en java?
I refactorizado este método mediante la introducción de Parameter Object. He creado la clase SearchCriteria
y ahora firma del método se ve así:
findByCriteria (SearchCriteria criteria)
pensé que los casos de SearchCriteria
solamente son creados por personas que llaman método y sólo se utilizan en el interior findByCriteria
método, es decir:
void processRequest() {
SearchCriteria criteria = new SearchCriteria()
.withMaxCost (maxCost)
.......
.withProducer (producer);
List<Product> products = productService.findByCriteria (criteria);
....
}
y
List<Product> findByCriteria(SearchCriteria criteria) {
return doSmthAndReturnResult(criteria.getMaxCost(), criteria.getProducer());
}
Así que no quería crear una clase pública separada para SearchCriteria
y ponerla dentro de ProductServiceInterface
:
public interface ProductService {
List<Product> findByCriteria (SearchCriteria criteria);
static class SearchCriteria {
...
}
}
¿Hay algo mal con esta interfaz? ¿Dónde colocarías la clase SearchCriteria
?
No es necesario marcar SearchCriteria como estático, todos los tipos de miembros de las interfaces son implícitamente estáticos (y públicos). – Oak