Frage zu DataBinding
-
Hi Leute,
Ich bin gerade dabei die letzten Dinge für ein Verwaltungsprogramm eines Einzelpersonenunternehmens zu progammieren.
Das Programm besitzt eine klassische 2 Tier Architektur mit GUI, Business Layer und Data Access Layer.
Derzeit bin ich gerade dabei ein kleines DataBinding Framework zu implementieren, welches mir die Businessobjekte in die GUI bringt und umgekehrt.
Ich habe leider nicht mehr allzuviel Zeit, da ich bis nächsten Donnerstag mit allem fertig sein muss und werde es daher nur sehr minimalistisch implementieren, ich würde nur gern wissen ob meine Grundidee und Umsetzung prinzipiell richtig ist.Ich habe eine abstrakte Klasse:
public abstract class AbstractDataBindingObject { public abstract Container bindTo(Object table); public abstract Object bindFrom(Container guidata); }
Von dieser Klasse leite ich eine eigene Klasse für jedes meiner Tabellen bzw Businessobjekte ab.
zb.:public class KundenDataBindingObject extends AbstractDataBindingObject { private Container container = new Container(); private Kunden kunde = new Kunden(); public KundenDataBindingObject() { } @Override public Container bindTo(Object kunde) { final Kunden kunden = (Kunden)kunde; //ID container.add(new JLabel("ID")); container.add(new JTextField(""+kunden.getId())); //Name container.add(new JLabel("Name")); container.add(new JTextField(kunden.getName())); //KundenNr container.add(new JLabel("Kundenummer")); container.add(new JTextField(""+kunden.getKundenNr())); //ATU container.add(new JLabel("ATU")); container.add(new JTextField(kunden.getATU())); //ZVR container.add(new JLabel("ZVR")); container.add(new JTextField(kunden.getZVR())); //FirmenBuchNr container.add(new JLabel("FirmenBuchNr")); container.add(new JTextField(""+kunden.getFirmenBuchNr())); //Firmengericht container.add(new JLabel("Firmengericht")); container.add(new JTextField(""+kunden.getFirmengericht())); return container; } @Override public Kunden bindFrom(Container guidata) { throw new UnsupportedOperationException("Not supported yet."); } }
Jede Klasse muss also sowohl die bindTo() als auch bindFrom() Methode implementieren.
bindTo() bekommt ein Businessobjekt übergeben und füllt einen Container mit JLabels und JTextFields in diesem Fall. Den Container reiche ich an mein GUI weiter und füge es dort meinem LayoutManager, Panel, Frame etc hinzu.
bindFrom() bekommt einen Container, ließt die Felder aus und gibt ein Businessobjekt zurück. (in diesem Fall noch nicht implementiert)Kann man das prinzipiell so gestalten oder wird das in der Regel ganz anders implementiert?
Danke im Vorhinein
-
Ach ja und der vollständigkeit halber noch.
Ich habe eine abstrakte Klasse und kein Inferface gewählt weil ich die Objekte der konkreten DataBindingObjekte mittels einer Factory zurückgebe. Wsh nicht unbedingt notwendig aber ich fand es einfach sauberer programmiert und übersichtlicher.