Ho un problema con il mio design del software. Voglio generare controlli dell'interfaccia utente da messaggi XML sulla rete. I messaggi XML contengono semplici informazioni su un componente e le sue proprietà, ad esempio:
<? version="1.0" encoding="utf-8" ?>
<components>
<component name="Car">
<property name="length" type="double" value="4.1"/>
<property name="numSeatbelts" type="int" value="5"/>
...
...
</component>
...
...
</components>
L'obiettivo è creare elementi dell'interfaccia utente dinamicamente che rappresentino queste proprietà e abilitino la modifica. Le proprietà vengono caricate in istanze della classe Property che risiede nel mio back-end:
public class Property<T> {
String getName();
T getValue();
void setValue(T value);
}
Il problema ora è quando ottengo un elenco di proprietà per la generazione del pannello Non ho informazioni sul tipo di pannello. Il mio approccio attuale è:
void generatePanels(List<Property> properties) {
for(Property property : properties) {
if(property.getValue() instanceof Double) {
add(new DoublePropertyPanel(property));
} else if(property.getValue() instanceof Integer) {
add(new IntegerPropertyPanel(property));
} else if(...) {
...
}
}
}
Che trovo davvero brutto. C'è un modo per sostituire il controllo del tipo con un pattern OOP, preservando la separazione dei layer (le proprietà non dovrebbero conoscere l'esistenza dell'interfaccia utente)?
Ecco un diagramma estremamente semplificato del mio programma: