Ich bin ein autodidaktischer, unerfahrener Programmierer, also entschuldige ich mich, wenn ich die Programmiersprache nicht verstehe.
Ich arbeite an einem Projekt, in dem ich Entwicklern Daten zur Verfügung stelle, die kontinuierlich aktualisiert werden. Diese erstellen im Wesentlichen ein Tool zum Generieren von Berichten aus Abfragen zu den Daten.
Es scheint, dass alle Beteiligten der Meinung sind, dass sie Datenwerte (nicht das Schema, sondern die Domänen / Werte selbst) in das Berichterstellungsprogramm fest einprogrammieren müssen.
Angenommen, wir berichten über Personal. Der Bericht wird in Kategorien unterteilt, mit einer Überschrift für jede Abteilung, und unter jeder Abteilungsüberschrift werden Unterüberschriften von Jobtiteln und unter jeder Unterüberschrift wird eine Liste von Mitarbeitern angezeigt. Die Entwickler möchten die Abteilungen und Berufsbezeichnungen fest codieren. Andererseits würde ich denken, dass sie diese Dinge zur Laufzeit abfragen könnten / würden, Datensätze nach ihnen sortieren und Berichtskopfzeilen dynamisch basierend auf den vorhandenen Werten generieren.
Da sich die Liste der potenziellen Werte im Laufe der Zeit ändert (z. B. werden Abteilungen erstellt / umbenannt, neue Berufsbezeichnungen hinzugefügt), muss der Code kontinuierlich aktualisiert werden. Es scheint mir, dass wir die Code-Wartungsschritte überspringen und die Berichte dynamisch organisieren könnten.
Da ich kein Entwickler bin, frage ich mich, was ich vermisse. Welche Vorteile könnte es haben, Werte in ein solches Tool fest zu codieren? Entwerfen sich Programme normalerweise so?
Antworten:
Wikipedia:
Hardcodierung wird als Antimuster angesehen.
Manchmal kann man es nicht vermeiden, aber es sollte vorübergehend sein.
Der einzige Vorteil der Hardcodierung scheint die schnelle Lieferung von Code zu sein.
quelle
"Ja wirklich?" Keine möglichen gültigen Use Cases?
Ich stimme zu, dass Hardcodierung im Allgemeinen ein Anti-Pattern oder zumindest ein sehr schlechter Code-Geruch ist , aber es gibt viele Fälle, in denen dies sinnvoll ist:
Immer noch ein Anti-Pattern ? Also ist Over-Engineering ! Es geht um die Lebenserwartung Ihrer Software !!
Nicht, dass ich behaupte, dass es alle guten Gründe gibt, und im Allgemeinen würde ich hart codierten Werten widersprechen. Einige können jedoch aus triftigen Gründen leicht einen Pass erhalten.
Und übersehen Sie auch nicht den ersten Punkt in Bezug auf Einfachheit / YAGNI, indem Sie ihn für trivial halten: Es gibt wahrscheinlich keinen Grund, einen verrückten Parser und Wertprüfer für ein einfaches Skript zu implementieren, das einen Job für einen engen Anwendungsfall sehr gut erledigt.
Es ist schwierig, das Gleichgewicht zu finden. Manchmal ist nicht abzusehen, dass eine Software wächst und länger hält als das einfache Skript, mit dem sie gestartet wurde. Oft ist es jedoch umgekehrt: Wir überentwickeln Dinge und ein Projekt wird schneller eingestellt, als Sie den Pragmatischen Programmierer lesen können. Sie haben Zeit und Mühe mit Dingen verschwendet, die ein früher Prototyp nicht benötigte.
Das ist das Schlimmste bei Anti-Patterns: Sie sind in beiden Extremen des Spektrums vorhanden, und ihr Erscheinungsbild hängt von der Sensibilität der Person ab, die Ihren Code überprüft.
quelle
Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']
. Es wäre auch viel schwieriger, das fest codierte Array beizubehalten, falls eine neue Abteilung oder ein neuer Titel eingeführt würde.Es gibt Zeiten, in denen es in Ordnung ist, Werte hart zu codieren. Zum Beispiel gibt es einige Zahlen wie 0 oder einen oder mehrere n ^ 2-1-Werte für Bitmasken, die für algorithmische Zwecke bestimmte Werte sein müssen. Das Zulassen solcher Werte für das konfigurierbare Element hat keinen Wert und eröffnet nur die Möglichkeit von Problemen. Mit anderen Worten, wenn das Ändern eines Werts nur zu Problemen führen würde, sollte er wahrscheinlich fest codiert werden.
In dem Beispiel, das Sie angegeben haben, sehe ich nicht, wo Hardcodierung nützlich wäre. Alles, was Sie erwähnen, würde / sollte sich bereits in der Datenbank befinden, einschließlich Überschriften. Sogar Dinge, die die Präsentation beeinflussen (wie die Sortierreihenfolge), können hinzugefügt werden, wenn sie nicht vorhanden sind.
quelle
Die Implementierung einer robusten Lösung, die es den Endbenutzern ermöglicht, Werte zu konfigurieren, die ansonsten fest programmiert worden wären, erfordert eine robuste Validierung dieser Werte. Haben sie eine leere Zeichenfolge eingegeben? Haben sie etwas Nicht-Numerisches eingegeben, wo es eine Zahl hätte sein sollen? Tun sie SQL Injection? Etc.
Durch Hardcodierung werden viele dieser Risiken vermieden.
Was nicht heißt, dass Hardcodierung immer oder sogar oft eine gute Idee ist. Dies ist nur einer der Faktoren, die berücksichtigt werden müssen.
quelle