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?