Bei vielen Ansätzen zur Softwareentwicklung wie agilen Methoden, domänengesteuertem Design und objektorientierter Analyse und Design wird empfohlen, einen iterativen Ansatz für die Entwicklung zu wählen.
Wir sollten unser Domain-Modell also nicht gleich beim ersten Start des Projekts fertigstellen. Stattdessen überarbeiten wir das Modell im Laufe der Zeit, weil wir mit der Zeit ein tieferes Verständnis der Problemdomäne gewinnen.
Abgesehen davon können sich die Anforderungen ändern, auch wenn wir versuchen, ein perfektes Modell im Voraus zu bekommen, von dem ich bereits überzeugt bin, dass es sehr schwierig ist. So , nachdem die Software hat sich auf die Produktion bereitgestellt wurde, können die Endbenutzer feststellen , dass eine bestimmte Anforderung nicht vollständig verstanden wird , oder noch schlimmer, wurde einige Anforderung fehlt.
Der Punkt hier ist, dass wir möglicherweise das Modell ändern müssen, nachdem die Software bereitgestellt wurde. In diesem Fall liegt ein Problem vor: Die Produktionsdatenbank enthält wichtige Benutzerdaten und ist bereits im Format für das alte Modell angepasst .
Das Aktualisieren des Codes kann eine schwierige Aufgabe sein, wenn der Code nicht gut entworfen ist und das System groß ist. Aber es kann mit der Zeit geschehen, wir haben Tools wie Git, die uns dabei helfen, ohne die produktionsbereite Version zu beschädigen.
Wenn sich das Modell ändert, die Eigenschaften von Klassen verschwinden oder was auch immer, sollte sich auch die Datenbank ändern. Aber wir haben ein Problem: Es gibt bereits Daten, die nicht verloren gehen können und die bereits für das alte Modell formatiert sind.
Es scheint, dass eine relationale Datenbank hier ein Hindernis darstellt, das uns daran hindert, iterativ Software zu entwickeln und sogar zu aktualisieren, wenn dies von Endbenutzern gefordert wird.
Ein Ansatz, den ich bereits verwendet habe, war das Codieren einer speziellen Klasse, die alte Datenbanktabellen neuen zuordnet. Diese Klassen wählen also Daten im alten Format aus, konvertieren sie in das vom neuen Modell verwendete Format und speichern sie in den neuen Tabellen.
Dieser Ansatz scheint nicht der beste zu sein. Meine Frage lautet hier: Gibt es bekannte und empfohlene Ansätze, um die iterative Entwicklung mit relationalen Datenbanken in Einklang zu bringen?