Ho un metodo processDataAssumingLinkedHashMapInput()
che elabora Map
. Il Map
deve essere un LinkedHashMap
ordinato dai valori. I dati provengono da getStrIntMap(query)
. Questo metodo ottiene resultSet da SQL e lo inserisce in LinkedHashMap. Ecco il codice:
public void processDataAssumingLinkedHashMapInput(){
String query = "select MYID, MYVALUE from MYTABLE order by MYVALUE";
Map<String, Integer> map = SQLTools.getStrIntMap(query);
for (Map.Entry<String, Integer> entry : rawEntryToSortOrderMap.entrySet()) {
//do something, assuming that values are ordered
}
//do more stuff
}
//SQLTools method, used by multiple other classes
public static Map<String, Integer> getStrIntMap(String query){
Map<String, Integer> map = new LinkedHashMap<>();
//ResultSet to map
return map;
}
La mia preoccupazione è che se qualcuno decide di cambiare getStrIntMap(String query)
in Map<String, Integer> map = new HashMap<>();
(ad esempio per motivi di prestazioni) si romperà processDataAssumingLinkedHashMapInput()
. Posso cambiare il tipo di ritorno di getStrIntMap
all'implementazione concreta, ma non sarebbe bello e qualcuno lo cambierà in un Map
astratto. Sono in grado di creare due metodi essenzialmente identici uno dei quali restituisce Map
e l'altro restituisce LinkedHashMap
, ma ciò interromperà il principio DRY. Posso riordinare i dati all'inizio del metodo processDataAssumingLinkedHashMapInput
, ma questo di nuovo viola la regola DRY. Qual è la migliore pratica per questo caso?