Предположим, у меня есть следующий интерфейс DAO:
public interface CountryData {
/**
* Get All Countries.
*
* @return A Collection of Countries.
* @throws DataAccessException Thrown if there is an error communicating with the data store. The Exception's
* Cause Exception can usually be examined to determine the exact nature of the
* error.
* @since 1.0.0
*/
public List<Country> getAll();
}
Далее предположим, что я абстрагирую этот DAO, потому что я мог бы предоставить 2 реализации, одну для базы данных и одну для веб-службы.
Я хочу перегрузить метод getAll , чтобы принять какой-то параметр упорядочения, указывающий порядок упорядочения возвращаемого значения.
Однако я не хочу связывать интерфейс с конкретной реализацией. Например, реализация базы данных будет использовать предложение ORDER BY и будет нуждаться в списке столбцов базы данных и направлении заказа, таком как «ASC» или «DESC», где реализация веб-службы не будет.
Каков наилучший способ предоставления такого параметра без привязки вызывающего к конкретной реализации?
EDIT
Небольшое уточнение к моему вопросу. Я не просто хочу указать параметр, указывающий направление заказа, но и что для заказа.
Например, предположим, что моя модель Страны была определена следующим образом:
public final class Country implements Serializable {
private int id;
private String name;
public Country() {
}
public Country(Country countryToCopy) {
this.id = countryToCopy.getId();
this.name = countryToCopy.getName();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
И я хочу, чтобы возвращаемое значение было упорядочено по name в порядке возрастания. Я мог бы использовать ENUM, как предложено, для направления заказа, но что было бы лучше всего указать свойство для заказа, не раскрывая особенности реализации?