Nel mio codice attuale ho sentito il desiderio di avere più volte dei metodi di supporto che generano una collezione di oggetti e di restituirli come una mappa di una stringa all'oggetto, con la stringa come id univoca come l'etichetta degli oggetti. Molti dei miei oggetti hanno etichette uniche generiche poiché queste etichette vengono utilizzate tramite un'interfaccia riposante quando si esegue una query sull'oggetto.
La ragione per cui voglio farlo è l'efficienza. Potrei avere una collezione di dimensioni decenti e so che il metodo che chiama qualsiasi metodo di helper privato che ho scritto vorrà sicuramente cercare oggetti specifici all'interno della mia collezione, quindi restituirli come una mappa consente invece al metodo di chiamata di essere eseguito in O (n) di O (n ^ 2).
Tuttavia, ritengo che il ritorno non sia auto-documentato. La chiave è solo una stringa, non c'è nulla che renda ovvio che la stringa sia specificamente l'etichetta degli oggetti. Ovviamente avrò commenti in tal senso, ma idealmente il codice di auto-documentazione è scritto così bene che non è necessario andare alle delirazioni del metodo per capire qualcosa.
Quindi ho alcune domande:
1) Il fatto di trovarmi a dover restituire mappe un odore di codice è di per sé? (altro quindi forse l'ottimizzazione prematura, che so che potrei essere un po 'colpevole, ma non mi sento troppo male per preoccuparmi del grande O di un metodo)
2) Questo è generalmente accettabile, o dovrei cercare un approccio più pulito? Ad esempio, dovrei creare un oggetto mappa che esegue automaticamente la mappatura di qualsiasi oggetto per etichetta? Per quanto riguarda i luoghi in cui voglio restituire una mappa in cui la chiave è una chiave diversa, dovrei creare un oggetto wrapping per tutti loro? o la mia mappa è abbastanza buona?
EDIT:
Sono stati richiesti maggiori dettagli, per chiarire la mia situazione specifica. Sto lavorando all'interno di java. Anche se potrei avere stringhe univoche non sono conosciute fino al momento della compilazione e le enumerazioni non sono una buona scelta, altrimenti le avrei usate! Non sto usando la riflessione o altri sistemi per generare dinamicamente i dati, i metodi e il loro significato sono praticamente standard ogni volta. Di solito si utilizza l'equivalente di un UUID degli oggetti (che in questo caso è una stringa utilizzata in tutto il dominio), o l'etichetta, che è una stringa univoca garantita utilizzata per fare riferimento all'oggetto in questione per una chiamata riposante.