Jemand erklärte mir, dass in der agilen Entwicklung die Richtlinien und die Anwendungslogik wichtiger sein sollten als Details wie die Persistenzmethode, und dass die Persistenzentscheidung am Ende getroffen werden sollte. Daher ist es möglicherweise eine gute Idee, mit einer einfacheren Persistenz wie beispielsweise Einfachdateien zu beginnen, bis wir den Punkt erreicht haben, an dem die Schwäche dieser Methode offensichtlich wird, und erst dann ändern wir die Persistenz, z. B. durch Verwendung einer relationalen Datenbank.
Ist das wahr oder habe ich das Konzept falsch verstanden? Ist dies die Art und Weise, wie ein agiles Team normalerweise eine Anwendung erstellt? Was sind die Gründe dafür und wann sollte ich nicht so vorgehen?
architecture
agile
database
persistence
Louis Rhys
quelle
quelle
Antworten:
Das Konzept, das vermittelt wird, ist definitiv Teil von Agilität und Relevanz.
Das angeführte Beispiel basiert jedoch auf einer völlig falschen Annahme:
dass die Implementierung einer Flat-File-Datenbank einfacher ist als die Verwendung eines RDBMS. - Oft völlig falsch
Das Beispiel sollte lauten: Die Persistenzschicht wird auf die einfachstmögliche Implementierung beschränkt, bis eine Entscheidung getroffen wird, dass sie unangemessen ist.
Für viele Entwicklerteams ist es eine Frage von ein oder zwei Stunden (oder 15 Minuten für kleine Datenbanken mit ORM), ob eine Flatfile-Datenbank, mit der sie sich nicht ständig einmischen müssen, ein Problem darstellt enormer Schmerz und Ärger, weil sie den gesamten Code für Such- und Datentabellenkonstruktion manuell von Hand schreiben müssen, wenn eine Datenbank so einfach sein kann, wie eine Tabelle in einer Benutzeroberfläche zu erstellen, einige Spalten hinzuzufügen und dann von einem ORM alles generieren zu lassen sonst brauchst du.
Wenn Sie nicht wissen, dass Ihre Persistenzschicht zu Beginn vorhanden ist, ist dies eine noch geeignetere Maßnahme, um mit einem gemeinsamen RDBMS zu beginnen, das Ihr Team gut kennt, da die Änderung von Flat-File zu RDBMS später viel größer ist als später Wechsel von einem RDBMS zu einem anderen. Es gibt viele Tools für die Konvertierung von den meisten gängigen RDBMS zu anderen solchen und Tipps und solche, da es sich um einen viel befahrenen Pfad handelt. Es gibt nur sehr wenige Tools für die Konvertierung von einer Flat-File in ein bestimmtes RDBMS, bei dem Ihre Flat-File ein proprietäres Format hat, für das Tooling außer für Ihre eigenen Bibliotheken noch nicht geschrieben wurde.
Zusammenfassend: Das Konzept ist korrekt und genau, aber das Beispiel basiert auf einer furchtbar großen und oft (fast immer) ungenauen Annahme .
quelle
Da Sie wissen, dass Sie eine Datenbank verwenden, macht es nicht viel Sinn, Code für den Umgang mit Flatfiles zu schreiben. Sie können einige Iterationen mit schreibgeschützten CSVs durchlaufen, aber Sie werden schnell feststellen, dass Sie Code schreiben, von dem Sie wissen, dass Sie ihn wegwerfen werden.
Eine Möglichkeit, die anfängliche Komplexität zu vereinfachen, besteht in der Verwendung von SQLite (einer Bibliothek, mit der Sie eine serverlose SQL-Datenbank erhalten, die in einer Datei gespeichert ist). Es ist ein flexibles Typensystem, sodass Sie sich nicht ernsthaft auf ein Schema festlegen müssen. Kein Server zum Konfigurieren / Herstellen einer Verbindung und Neuerstellen Ihrer Datenbank ist so einfach wie das Löschen einer Datei. Außerdem können Sie das DB-Image bei Bedarf einfach zusammen mit dem Code in die Versionskontrolle einbeziehen.
quelle
Es ist ein Beispiel, das verwendet wird, um ein Konzept zu demonstrieren, anstatt ein Konzept an sich.
Das Konzept ist, dass Sie eine architektonische Entscheidung erst im letzten verantwortlichen Moment treffen , aber nicht später. In der Realität haben Sie jedoch häufig eine Entscheidung über die Datenbank, die Sie sehr früh verwenden werden. Das ist vielleicht nicht perfekt, aber es ist eine Tatsache.
Sobald diese Entscheidung getroffen wurde, können Sie sie nicht mehr aktiv umgehen. Das Speichern von Inhalten in einer vorhandenen Datenbank ist oft so einfach wie das Speichern in einer Einfachdatei.
Der Wechsel von MySQL unter Linux zu SQL Server unter Windows ist jedoch möglicherweise nicht so einfach wie der Wechsel von einer einfachen Datei zu SQL Server unter Windows. Das ist der wahre Punkt. Wenn es also Zweifel an der endgültigen Lösung gibt, wählen Sie die einfachste Option und berücksichtigen Sie Änderungen. Wenn Sie eine Entscheidung getroffen haben, bleiben Sie dabei.
quelle
Was beharrst du?
Ich bin in einem agilen Team und für eine Anwendung behalten wir fast alles in der Datenbank. Wäre dies nicht der Fall, hätte diese Anwendung nicht viel zu tun - die dauerhafte Speicherung von Dingen in einer Datenbank ist ein großer Teil ihrer Existenzberechtigung .
Also: Worauf bestehen Sie und was macht Ihre Bewerbung? Wenn es der Anwendung eigentlich egal ist, wo ihre Daten gespeichert bleiben, können Sie eine kleine Ebene schreiben, die die Entscheidung zwischen Flatfile und Datenbank trifft (diese Entscheidung kann irgendwo in einer Konfigurationsdatei gespeichert werden). Ich glaube , Sie müssen Ihre Anwendung und Ihre Daten zu bewerten und entscheiden , ob es sinnvoll , in Ihrem speziellen Fall macht die Zeit in Datenbankpersistenz zu investieren, oder einfach nur lesen / schreiben flache Dateien (die werden wahrscheinlich schneller in Bezug auf der Entwicklungszeit sein).
quelle
Viele Leute missverstehen diesen Aspekt von Agilität als das, was bedeutet, dass sie künftige Funktionen nicht im Voraus planen sollten. Nichts ist weiter von der Wahrheit entfernt. Was Sie nicht tun, ist die Planung zukünftiger Funktionen, um die sofortige Wertschöpfung für Ihre Kunden zu verzögern.
Wie das auf so etwas wie Persistenz zutrifft, hängt stark von Ihrer Anwendung ab. Eines meiner aktuellen Hobbyprojekte ist ein Taschenrechner. Schließlich möchte ich in der Lage sein, benutzerdefinierte Konstanten und Funktionen zu speichern und den Zustand zu speichern, wenn ich das Programm schließe. Das erfordert Beharrlichkeit, aber ich habe noch nicht einmal darüber nachgedacht, welche Form dies annehmen würde. Mein Programm wird ohne Beharrlichkeit sehr brauchbar sein, und wenn ich es jetzt hinzufüge, wird sich meine erste Veröffentlichung erheblich verzögern. Ich hätte lieber einen funktionierenden Taschenrechner mit weniger Funktionen als gar keinen, während ich darauf warte, dass er perfekt ist.
Ein weiteres Hobbyprojekt von mir ist die Farbkorrektur von Videos und Fotografien. Diese Anwendung wird vollständig unbrauchbar sein, ohne dass meine laufenden Arbeiten gespeichert werden können. Der dafür erforderliche Code ist im gesamten Programm vorhanden. Wenn ich es nicht von Anfang an richtig verstehe, kann es unerschwinglich sein, es zu ändern. Deshalb habe ich mich ganz schön bemüht, im Vorfeld durchzuhalten.
Die meisten Projekte würden irgendwo dazwischen liegen, aber Sie sollten sich nie schlecht fühlen, wenn Sie zukünftige Funktionen planen, wenn dies jetzt nur wenig oder gar keinen zusätzlichen Aufwand bedeutet. Datenbanken mögen komplex sein, aber der größte Teil dieser Komplexität verbirgt sich hinter einer soliden, gut getesteten Oberfläche. Die Arbeit, die Sie in Ihrer Anwendung erledigen müssen, kann für eine Datenbank sehr wohl weniger sein als für eine flache Datei, da Ihnen alle Funktionen einer Datenbank kostenlos zur Verfügung stehen. Es gibt "Hybrid" -Optionen wie SQLite, wenn Sie den Ärger eines Datenbankservers noch nicht bewältigen möchten.
quelle
Ich denke, Sie konzentrieren sich auf die falschen Werte. In Agile steht der Geschäftswert im Mittelpunkt. Sie erstellen ein Produkt, um einigen Endbenutzern einen Geschäftswert zu liefern.
Wenn Sie die Persistenzschicht zu spät erstellen oder auf Ihrem Weg nachholen, ist dies Ihre Strategie, um dem Kunden einen Geschäftswert zu liefern. Ich glaube nicht, dass der Begriff "agil" selbst vorschreibt, ob Sie das eine oder andere tun sollten.
Der Standpunkt zur Verzögerung der Datenspeicherungsstrategie wird in dieser Präsentation von Robert C. Martin (einem der Autoren des agilen Manifests) vertreten.
Es ist eine sehr gute Präsentation, ich kann empfehlen, dass Sie es sehen.
Aber damit bin ich nicht einverstanden! Zumindest zu einem gewissen Grad.
Ich glaube nicht, dass Sie eine User Story für "Fertig" aufrufen können, wenn die User Story Daten enthält, die beibehalten werden sollten, und Sie tatsächlich keine Art von Persistenz implementiert haben.
Wenn der Product Owner entscheidet, dass es jetzt Zeit ist, live zu gehen, können Sie dies nicht tun. Und wenn Sie erst spät im Projekt mit der Implementierung von Persistenz begonnen haben, wissen Sie auch nicht, wie lange es dauern würde, die Persistenzschicht zu implementieren, was ein großes Projektrisiko darstellt.
Die agilen Projekte, an denen ich gearbeitet habe, haben die Datenzugriffsstrategie nicht verschoben. Aber es wurde entkoppelt, so dass wir es auf dem Weg ändern können. Und das gesamte Datenbankschema ist nicht von vornherein konzipiert. Tabellen und Spalten werden auf dem Weg erstellt, den sie benötigen, um den gespeicherten Benutzer zu implementieren, der letztendlich den geschäftlichen Wert liefert.
quelle
Es erfordert ein gutes Urteilsvermögen und Erfahrung, um festzustellen, welche Fragen zuerst beantwortet werden müssen, wenn ein neues Projekt gestartet wird.
Wenn das Endprodukt noch nicht bekannt ist, hilft Ihnen das Erstellen / Prototyping schnell, dies herauszufinden, und es kann hilfreich sein, es agil zu iterieren. Dies birgt natürlich das Risiko, dass spät im Prozess festgestellt wird, dass die Implementierung der Persistenz länger dauern wird, als Sie Ihren Stakeholdern mitgeteilt haben.
Wenn das Endprodukt bekannt ist, ist es möglicherweise wichtiger, frühzeitig zu wissen, wie die Persistenz in Ihrer Anwendung funktioniert. Das Risiko besteht darin, dass später im Entwicklungsprozess Probleme mit Ihrer Produktspezifikation auftreten.
quelle
Flat Files sind nicht einfach!
Sie erlauben Lagerung und das ist alles. Die Struktur der Daten, Zugriffspfade usw. liegt ganz bei Ihnen, und es gibt zahlreiche Möglichkeiten, dies falsch zu verstehen.
Es gibt Gründe, warum Datenbanken existieren, und einer davon ist, die Dinge für Entwickler einfacher zu machen.
Der größte Teil meiner Entwicklung wird für große Systeme in großen Unternehmen durchgeführt. Wir haben immer ein vollständiges und gut durchdachtes Datenmodell, bevor wir mit dem Design oder der Entwicklung fortfahren. Ein Datenmodell hilft Ihnen, Ihr Problem zu verstehen und ermöglicht eine saubere Implementierung.
Vergessene Datenelemente, nicht übereinstimmende Datenstrukturen und andere Albträume können durch die Erstellung eines Datenmodells im Voraus vermieden werden.
Sie können die tatsächliche Auswahl der Datenbanktechnologie bis nach dem Datenmodell belassen. Bei den meisten "Persistenz" -Technologien handelt es sich jedoch um eng gebundene Programmier- und sogar Designstile. Wenn Sie für eine relationale Datenbank codieren und später zu einem Wert für einen trüben Schlüssel wechseln, müssen Sie die Hälfte Ihres Codes vollständig neu schreiben.
Wenn Sie mit einfachen Dateien beginnen und zu einer relationalen Datenbank wechseln, werden Sie wahrscheinlich die Hälfte Ihres Codes wegwerfen, da Ihre Entwickler ihre Zeit mit der Implementierung einer pissarmen Datenbank verschwendet haben.
quelle
Sollten Sie versuchen, vor der Datenbank eine flache Datei zu behalten?
Ja, du solltest es versuchen. Vor allem, wenn Sie es noch nie probiert haben. Egal wie es ausgeht, Sie werden etwas lernen.
quelle