Per esempio:Qual è il modo migliore per navigare in un albero complesso di oggetti dissimili?
class Vehicle {
Collection<Axle> axles;
}
class Axle {
Collection<Wheel> wheels;
}
class Wheel {
// I think there are dually rims that take two tires -- just go with it
Collection<Tire> tires;
}
class Tire {
int width;
int diameter;
}
Ho un servizio attraverso il quale posso ottenere una raccolta di tutti gli oggetti del veicolo che conosco circa. Ora dì che ho una gomma di una larghezza e di un diametro specifici, e voglio trovare un veicolo che possa prenderlo. Il modo più semplice è quello di avere una serie di quattro cicli annidati, in questo modo:
for (Vehicle vehicle : vehicles) {
for (Axle axle : vehicle.getAxles()) {
for (Wheel wheel : axle.getWheels()) {
for (Tire tire : wheel.getTires()) {
if (tire.width == targetWidth
&& tire.diameter == targetDiameter) {
// do something
break;
}
}
}
}
}
C'è un modello buon design per questo? O una migliore struttura dati da usare? Sarebbe meglio tenere semplicemente un indice da qualche parte delle informazioni sui pneumatici mappate ai veicoli?
modificare: rispondendo alle domande dei commenti
Avete controllo sulla struttura dei dati si ricevono dal servizio?
Sì
Avete bisogno di cercare pneumatici diversi più volte nello stesso dei dati?
Sì
è la prestazione un problema?
Non particolarmente
Quando si trova il pneumatico, ti basta sapere quale veicolo lo contiene o hai bisogno anche l'asse e la ruota?
A volte solo il veicolo, a volte solo l'asse - due contesti diversi
Avete bisogno il riferimento al pneumatico che è stato trovato?
Sì, nei casi in cui ho bisogno l'asse
EDIT2: Estendendo ulteriormente la metafora, per spiegare i due contesti sopra:
Contesto 1 - Voglio sapere il veicolo, quindi posso inviare un lavoratore per ritirare il veicolo e riportarlo indietro
Contesto 2 - Voglio conoscere l'asse e la gomma, perché sono al veicolo che prova a fare il lavoro
Dipende ... Hai controllare la struttura dei dati che ricevi dal servizio? Hai bisogno di cercare pneumatici diversi più volte con gli stessi dati? Le prestazioni sono un problema? Quando trovi il pneumatico, hai solo bisogno di sapere quale veicolo lo contiene o hai bisogno anche dell'asse e della ruota? Hai bisogno del riferimento alla gomma che è stata trovata? – Cinnam
Ho risposto al post. Grazie per aver guardato! –
Questo problema mi sembra correlato alla Legge di Demetra (che è più un principio che una "legge"). Vedi http://stackoverflow.com/q/12284057/1168342 – Fuhrmanator