Zuerst ein bisschen Hintergrund. Ich codiere eine Suche von Alter -> Rate. Es gibt 7 Altersklammern, daher besteht die Nachschlagetabelle aus 3 Spalten (Von | Bis | Rate) mit 7 Zeilen. Die Werte ändern sich selten - es handelt sich um gesetzlich vorgeschriebene Sätze (erste und dritte Spalte), die seit 3 Jahren gleich bleiben. Ich dachte mir, dass der einfachste Weg, diese Tabelle zu speichern, ohne sie fest zu codieren, in der Datenbank in einer globalen Konfigurationstabelle als einzelner Textwert mit einer CSV besteht (also "65,69,0,05,70,74,0,06" ist, wie die Ebenen 65-69 und 70-74 würden gespeichert). Relativ einfach zu analysieren und dann zu verwenden.
Dann wurde mir klar, dass ich zur Implementierung eine neue Tabelle erstellen, ein Repository zum Umschließen, Datenschichttests für das Repo, Komponententests für den Code, der die CSV in der Tabelle nicht flach macht, und Tests für die Suche selbst erstellen müsste. Der einzige Vorteil all dieser Arbeit besteht darin, dass die Nachschlagetabelle nicht fest codiert wird.
Wenn Sie mit den Benutzern sprechen (die derzeit die Nachschlagetabelle direkt verwenden - indem Sie sich eine Hardcopy ansehen), ist die Meinung so ziemlich, dass "die Preise sich nie ändern". Offensichtlich ist das nicht richtig - die Raten wurden erst vor drei Jahren erstellt und in der Vergangenheit hatten Dinge, die sich "nie ändern", die Angewohnheit, sich zu ändern. Um dies defensiv zu programmieren, sollte ich die Nachschlagetabelle definitiv nicht speichern die Anwendung.
Außer wenn ich an YAGNI denke . Die von mir implementierte Funktion gibt nicht an, dass sich die Raten ändern. Wenn sich die Raten ändern, ändern sie sich immer noch so selten, dass die Wartung nicht einmal in Betracht gezogen wird, und die Funktion ist nicht kritisch genug, dass bei einer Verzögerung zwischen der Ratenänderung und der aktualisierten Anwendung alles beeinträchtigt würde.
Ich habe so ziemlich entschieden, dass nichts von Wert verloren geht, wenn ich die Suche hart codiere, und ich bin nicht allzu besorgt über meine Herangehensweise an diese spezielle Funktion. Meine Frage ist, habe ich als Fachmann diese Entscheidung richtig begründet? Das Hardcodieren von Werten ist ein schlechtes Design, aber die Mühe, die Werte aus der Anwendung zu entfernen, scheint gegen das YAGNI-Prinzip zu verstoßen.
BEARBEITEN Um die Frage zu klären, bin ich nicht besorgt über die tatsächliche Implementierung. Ich mache mir Sorgen, dass ich entweder schnell etwas Schlechtes tun und es mit YAGNI rechtfertigen kann, oder dass ich einen defensiveren Ansatz mit hohem Aufwand wählen kann, der selbst im besten Fall letztendlich nur geringe Vorteile hat. Kommt meine Entscheidung, ein Design zu implementieren, von dem ich weiß, dass es fehlerhaft ist, als professioneller Programmierer einfach auf eine Kosten-Nutzen-Analyse?
BEARBEITEN Obwohl alle Antworten sehr interessant waren, da ich denke, dass dies auf die Designentscheidungen einer Person zurückzuführen ist, denke ich, dass die besten Antworten @ Corbins und @EZ Harts waren, da sie Dinge ansprechen , die ich in der Frage nicht berücksichtigt hatte:
- Die falsche Zweiteilung zwischen "korrektes Entfernen fest codierter Werte" durch Verschieben in die Datenbank und "effizientes Anwenden von YAGNI" durch Verwendung von fester Codierung. Es gab eine dritte Möglichkeit, die Nachschlagetabelle in die App-Konfiguration einzufügen, die nicht den richtigen Aufwand verursacht, und zwar ohne die Effizienz von YAGNI. Wir sind im Allgemeinen nicht auf Entscheidungen beschränkt, und es kommt dann auf eine Kosten-Nutzen-Entscheidung an.
- Durch die Codegenerierung kann der Aufwand für das Verschieben der fest codierten Werte in die Datenbank verringert werden, und dies beseitigt auch meine überentwickelte Entscheidung, eine CSV in die Tabelle zu verarbeiten. Möglicherweise führt dies auch zu einem langfristigen Wartungsproblem mit dem generierten Code, wenn sich die grundlegenden Anforderungen für die Suchmethode ändern. Dies alles wirkt sich nur auf die Kosten-Nutzen-Analyse aus, und es ist wahrscheinlich, dass ich, wenn ich diese Automatisierung zur Verfügung gehabt hätte, nicht einmal daran gedacht hätte, so etwas hart zu codieren.
Ich markiere die Antwort von @ Corbin als richtig, da sie meine Annahmen zu den Entwicklungskosten ändert, und ich werde wahrscheinlich in naher Zukunft einige Tools zur Codegenerierung in mein Arsenal aufnehmen.