Sto scrivendo il server supportato da un'API pre-scritta. Ho intenzione di ottenere un numero di stringhe che rappresentano porte, segnali, percorsi, ecc ecc. Ecc. Ho bisogno di cercare l'oggetto associato a una determinata etichetta, questi oggetti sono tutti in memoria (nessuna magia sql per farlo per me) .
La mia domanda è: quanto posso associare una determinata etichetta univoca con l'oggetto mutabile che rappresenta? Ho abbastanza oggetti che guardare attraverso ogni segnale o ogni porta per trovare quello che corrisponde è possibile, ma potrebbe essere leggermente troppo lento.
Per essere onesti, il metodo diretto "guarda ogni oggetto" è probabilmente abbastanza buono per un corpo di oggetti così piccolo e qualsiasi altra cosa è l'ottimizzazione prematura, ma sono ancora curioso di sapere quale sarebbe la soluzione giusta se pensassi che i miei segnali fossero andando a crescere un po 'più grande. Per come la vedo ci sono due opzioni disponibili.
In primo luogo sarebbe quello di creare un "negozio" che sia una semplice mappa tra oggetto ed etichetta. Potrei farlo in modo che ogni volta che chiamo addObject
l'oggetto venga automaticamente salvato in una hashmap o qualcosa di simile. Funziona, ma dipende dal fatto che aggiungo e cancellando ogni oggetto in modo che la mappa non cresca indefinitamente. Il problema più grande per me è che questo implica avere qualche mappa statica nascosta nella mia classe ModelObject che semplicemente sembra ... sbagliata in qualche modo.
L'altra opzione è di avere un metodo che possa interpretare le etichette. Tutte queste etichette derivano dagli oggetti sottostanti. Quindi, per esempio, posso guardare l'etichetta del segnale e dire "questi 20 caratteri sono la porta" per capire quale porta ho bisogno. Questo mi permetterebbe di capire rapidamente ciò di cui ho bisogno. Tuttavia, se il metodo label viene modificato, anche il metodo translateLabelToObject
deve essere aggiornato o tutto si interrompe.
Quale soluzione è più pulita o forse una soluzione più pulita rispetto a quella di cui sopra?
Per la cronaca sto lavorando con un numero sufficiente di variabili per rendere il confronto diretto un po 'lento, ma non abbastanza per preoccuparmi dell'overhead della memoria, scritto in java. Tutti gli oggetti con etichette che devo cercare estendono la stessa classe genitore.