QuestionPy-Pakete sollten* nach den Semantic Versioning Regeln versioniert werden. Daraus abgeleitet, müssen Migrationen entweder explizit angegeben werden oder können implizit geschehen.
Es sollen folgende Operationen ermöglicht werden:
upgrade
von (X) |
zu (Y) |
Art |
| 1.5.0 |
1.5.1 |
implizit |
| 1.5.* |
1.6.* |
implizit |
| 1.*.* |
2.*.* |
explizit |
Wenn der Question-State von Version X auf Version Y geupgraded werden soll, muss die Migration im Paket Y erfolgen.
Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine upgrade_to-Funktion in Y implementiert sein, die die Migrations-Logik enthält.
downgrade
von (X) |
zu (Y) |
Art |
| 1.5.1 |
1.5.0 |
implizit |
| 1.6.* |
1.5.* |
explizit |
| 2.*.* |
1.*.* |
explizit |
Wenn der Question-State von Version X auf Version Y gedowngraded werden soll, muss die Migration im Paket X erfolgen.
Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine downgrade_to-Funktion in X implementiert sein, die die Migrations-Logik enthält.
sidegrade
Wenn man sidegraden möchte, muss das immer explizit geschehen. Will man den State von Paket X nach Paket Y sidegraden, dann sollte im Paket Y eine sidegrade_from-Funktion implementiert sein. Hier könnte man noch überlegen, ob X auch eine sidegrade_to-Funktion implementieren darf. Eine sidegrade_from-Funktion sollte dabei nicht nur den Namespace und Shortname des Pakets entgegennehmen, sondern auch die Version, z.B.:
X möchte zu Y migrieren und Y hat einesidegrade_from("X", Version(1, 0, 0))-Funktion. - Y kann also alle States mit Paketversion 1.0.* direkt* migrieren. Ideal wäre es, wenn die upgrade_to- oder downgrade_to-Funktionen von X aufgerufen werden, um bei Inkompatibilität einen kompatiblen State zu erzielen.
* Wenn wir es nicht als Bedingung sehen, dass Pakete strikt nach SemVer versioniert werden, dann können wir zusätzliche upgrade_to-/downgrade_to-Funktionen erlauben (z.B.: upgrade_to(Version(1, 5, 1)). Allerdings wäre dann die beschriebene sidegrade_from-Logik so nicht umsetzbar.
QuestionPy-Pakete sollten* nach den Semantic Versioning Regeln versioniert werden. Daraus abgeleitet, müssen Migrationen entweder explizit angegeben werden oder können implizit geschehen.
Es sollen folgende Operationen ermöglicht werden:
upgrade
X)Y)Wenn der Question-State von Version
Xauf VersionYgeupgraded werden soll, muss die Migration im PaketYerfolgen.Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine
upgrade_to-Funktion inYimplementiert sein, die die Migrations-Logik enthält.downgrade
X)Y)Wenn der Question-State von Version
Xauf VersionYgedowngraded werden soll, muss die Migration im PaketXerfolgen.Hierfür muss im "expliziten-Fall" und muss nicht* im "impliziten-Fall" eine
downgrade_to-Funktion inXimplementiert sein, die die Migrations-Logik enthält.sidegrade
Wenn man sidegraden möchte, muss das immer explizit geschehen. Will man den State von Paket
Xnach PaketYsidegraden, dann sollte im PaketYeinesidegrade_from-Funktion implementiert sein. Hier könnte man noch überlegen, obXauch einesidegrade_to-Funktion implementieren darf. Einesidegrade_from-Funktion sollte dabei nicht nur den Namespace und Shortname des Pakets entgegennehmen, sondern auch die Version, z.B.:Xmöchte zuYmigrieren undYhat einesidegrade_from("X", Version(1, 0, 0))-Funktion. -Ykann also alle States mit Paketversion 1.0.* direkt* migrieren. Ideal wäre es, wenn dieupgrade_to- oderdowngrade_to-Funktionen vonXaufgerufen werden, um bei Inkompatibilität einen kompatiblen State zu erzielen.* Wenn wir es nicht als Bedingung sehen, dass Pakete strikt nach SemVer versioniert werden, dann können wir zusätzliche
upgrade_to-/downgrade_to-Funktionen erlauben (z.B.:upgrade_to(Version(1, 5, 1)). Allerdings wäre dann die beschriebenesidegrade_from-Logik so nicht umsetzbar.