Hallo Forum,
meine Frage bezieht sich eher auf Code und OOP-Style. Das Programm funktioniert und macht im Prinzip was es soll.
Ich habe eine abstrakte Basis-Klasse:
Diese Basis-Klasse implementiert die Methoden zum Setzen der Eigenschaften. Dann existierten zwei weiteren Klassen, die von dieser Basisklasse erben:
Die andere Klasse, die von dieser erbt implementiert nur die Methode parseResponse() auf eine andere Art und Weise.
Die konkrete Klassen, die einfach von XMLMasterDataResponse erben, brauchen nur noch die Methode createItemObjects(Element items) implementieren:
Um andere Werte in die xmlItems-Liste einzufügen, muss immer nur eine andere Klasse erstellt werden, die createItemObjects(Element items) implementiert.
Erzeugt und konfiguriert werden die einzelnen Objekte dann so:
Normalerweise übergebe ich das response Objekt noch einer Methode sendXML(XMLResponse response), die die Funktionen response.setResponseContent(in2) und response.execute() ausführt.
Kurz und Knapp...kann man das so machen? Für Tipps und Hinweise wäre ich sehr dankbar.
Grüße,
Sandro
meine Frage bezieht sich eher auf Code und OOP-Style. Das Programm funktioniert und macht im Prinzip was es soll.
Ich habe eine abstrakte Basis-Klasse:
Java:
public abstract class XMLResponse {
protected InputStream in;
protected String specialChild;
public void execute() throws JDOMException, IOException {
this.parseResponse();
}
public abstract List<?> getParseObjects();
public void setResponseContent(InputStream in) {
this.in = in;
}
public void setSpecialChild(String specialChild) {
this.specialChild = specialChild;
}
protected abstract void parseResponse() throws JDOMException, IOException;
}
Diese Basis-Klasse implementiert die Methoden zum Setzen der Eigenschaften. Dann existierten zwei weiteren Klassen, die von dieser Basisklasse erben:
Java:
public abstract class XMLMasterDataResponse extends XMLResponse {
protected List xmlItems;
@Override
public List<?> getParseObjects() {
return xmlItems;
}
@Override
protected void parseResponse() throws JDOMException, IOException {
XMLParser parser = new XMLMasterData(in);
Element items = parser.getSpecialChildParserElement(specialChild);
this.createItemObjects(items);
}
public abstract void createItemObjects(Element items);
}
Die andere Klasse, die von dieser erbt implementiert nur die Methode parseResponse() auf eine andere Art und Weise.
Die konkrete Klassen, die einfach von XMLMasterDataResponse erben, brauchen nur noch die Methode createItemObjects(Element items) implementieren:
Java:
public class XMLMasterDataBillOfMaterial extends XMLMasterDataResponse {
@Override
public void createItemObjects(Element items) {
xmlItems = new ArrayList<XMLBillOfMaterialStructure>();
List<Element> item = items.getChildren();
for(Element i: item) {
XMLBillOfMaterialStructure billItem = new XMLBillOfMaterialStructure();
billItem.setItemIDSupplier(i.getChild("ItemIDSupplier").getText());
billItem.setArticleIDSupplier(i.getChild("ArticleIDSupplier").getText());
billItem.setDescription(i.getChild("Description").getText());
xmlItems.add(billItem);
}
}
}
Um andere Werte in die xmlItems-Liste einzufügen, muss immer nur eine andere Klasse erstellt werden, die createItemObjects(Element items) implementiert.
Erzeugt und konfiguriert werden die einzelnen Objekte dann so:
Java:
XMLResponse response = new XMLMasterDataBillOfMaterial();
response.setSpecialChild("BillOfMaterial");
response.setResponseContent(in2);
response.execute();
Normalerweise übergebe ich das response Objekt noch einer Methode sendXML(XMLResponse response), die die Funktionen response.setResponseContent(in2) und response.execute() ausführt.
Kurz und Knapp...kann man das so machen? Für Tipps und Hinweise wäre ich sehr dankbar.
Grüße,
Sandro