Hallo,
vielleicht kennt ihr folgendes Problem:
Hauptsächlich in Bereichen von Gesetzen und Verordnungen gibt es Regeln und Verfahren, die bis zu einem bestimmten Datum gültig sind, danach gilt wieder eine andere Regel oder anderes Verfahren. Dann gibt es meistens auch einen begrenzten Zeitraum in dem beide Regeln vom Programm abgedeckt werden müssen. Als Lösung kommen meines Erachtens drei Möglichkeiten in Frage:
(Annahme: Alles was mit diesem Vorgang zutun hat, wird momentan von einer Klasse erledigt.)
- In der Klasse wird überall wo nötig die zeitliche Unterscheidung eingebaut so a la:
if (datum <= ....) {}
else {}
Nicht besonders elegant, aber pragmatischer Ansatz.
- Alle betroffenen Stellen werden an ein Delegate ausgelagert und das Datum bestimmt welches Delegate dazugebunden wird.
(Schon viel besserer Ansatz)
- Im Prinzip funktioniert das alte Verfahren schon und ist getestet. Durch die Implementierung des neuen Verfahrens wird bei den beiden oben genannten Möglichkeiten der alte funktionierende Code wieder angefaßt (mit allen Konsequenzen). Darum wäre es wesentlich eleganter die Klasse zu Versionieren. Also die Klasse Version 1.0 handelt nach der alten Regel. Die neue Klasse Version 2.0 kennt nur die neue Regel. Die beiden Klassen heißen gleich und die Applikation kennt momentan nur die neue Klasse mit der Version 2.0. Im Bedarfsfall, wenn also ausnahmsweise noch mal nach den alten Regeln gehandelt werden soll, würde ich gerne ein Objekt der Klasse Version 1.0 erzeugen. Mal angenommen ich hätte noch das Class-File der Version 1.0 im Dateisystem liegen.
Wie erzeuge mit Hilfe dieses Class-Files (1.0) ein Objekt der Klasse Version 1.0. Meine Frage zielt darauf ab, wie lade ich zur Laufzeit den Code in die VM erzeuge daraus ein Objekt?
Ich hoffe ihr versteht was ich meine und könnt mir helfen.
Gruß
Wolfgang
PS: Mir fällt auch noch eine vierte Variante ein: Man könnte aus der Klasse ein Interface machen und die zeitlich unterschiedlichen Verfahren von zwei namentlich unterschiedlichen Klassen abhandeln lassen.
Es geht mir hier nicht darum zusätzlich Lösungsansätze zu finden, sondern zu prüfen, ob die von mir gewünschte "Versionierung" von Klassen möglich ist.
vielleicht kennt ihr folgendes Problem:
Hauptsächlich in Bereichen von Gesetzen und Verordnungen gibt es Regeln und Verfahren, die bis zu einem bestimmten Datum gültig sind, danach gilt wieder eine andere Regel oder anderes Verfahren. Dann gibt es meistens auch einen begrenzten Zeitraum in dem beide Regeln vom Programm abgedeckt werden müssen. Als Lösung kommen meines Erachtens drei Möglichkeiten in Frage:
(Annahme: Alles was mit diesem Vorgang zutun hat, wird momentan von einer Klasse erledigt.)
- In der Klasse wird überall wo nötig die zeitliche Unterscheidung eingebaut so a la:
if (datum <= ....) {}
else {}
Nicht besonders elegant, aber pragmatischer Ansatz.
- Alle betroffenen Stellen werden an ein Delegate ausgelagert und das Datum bestimmt welches Delegate dazugebunden wird.
(Schon viel besserer Ansatz)
- Im Prinzip funktioniert das alte Verfahren schon und ist getestet. Durch die Implementierung des neuen Verfahrens wird bei den beiden oben genannten Möglichkeiten der alte funktionierende Code wieder angefaßt (mit allen Konsequenzen). Darum wäre es wesentlich eleganter die Klasse zu Versionieren. Also die Klasse Version 1.0 handelt nach der alten Regel. Die neue Klasse Version 2.0 kennt nur die neue Regel. Die beiden Klassen heißen gleich und die Applikation kennt momentan nur die neue Klasse mit der Version 2.0. Im Bedarfsfall, wenn also ausnahmsweise noch mal nach den alten Regeln gehandelt werden soll, würde ich gerne ein Objekt der Klasse Version 1.0 erzeugen. Mal angenommen ich hätte noch das Class-File der Version 1.0 im Dateisystem liegen.
Wie erzeuge mit Hilfe dieses Class-Files (1.0) ein Objekt der Klasse Version 1.0. Meine Frage zielt darauf ab, wie lade ich zur Laufzeit den Code in die VM erzeuge daraus ein Objekt?
Ich hoffe ihr versteht was ich meine und könnt mir helfen.
Gruß
Wolfgang
PS: Mir fällt auch noch eine vierte Variante ein: Man könnte aus der Klasse ein Interface machen und die zeitlich unterschiedlichen Verfahren von zwei namentlich unterschiedlichen Klassen abhandeln lassen.
Es geht mir hier nicht darum zusätzlich Lösungsansätze zu finden, sondern zu prüfen, ob die von mir gewünschte "Versionierung" von Klassen möglich ist.
Comment