it-swarm.com.de

Gibt es Vorteile, Datenwerte in ein Programm fest zu codieren?

Ich bin ein autodidaktischer, unerfahrener Programmierer, also entschuldige ich mich, wenn ich den Programmierjargon 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 Programm zur Berichterstellung fest codieren müssen.

Nehmen wir zum Beispiel an, wir berichten über Personal. Der Bericht wird in Kategorien unterteilt, mit einer Überschrift für jede Abteilung, und dann werden unter jeder Abteilungsüberschrift Unterüberschriften von Berufsbezeichnungen und dann unter jeder Unterüberschrift 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 Berichtsheader dynamisch basierend auf den vorhandenen Werten generieren könnten.

Da sich die Liste potenzieller 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 Schritte zur Codepflege überspringen und die Berichte dynamisch organisieren könnten.

Da ich kein Entwickler bin, frage ich mich, was mir fehlt. Welche Vorteile könnte es haben, Werte in ein solches Tool fest zu codieren? Sind Programme normalerweise so gestaltet?

13
Tom

Wikipedia :

Hardcodierung (auch Hardcodierung oder Hardcodierung) bezieht sich auf die Softwareentwicklungspraxis des Einbettens von Daten, die möglicherweise nur im Nachhinein als Eingabe- oder Konfigurationsdaten betrachtet werden können, direkt in den Quellcode eines Programms oder eines anderen ausführbaren Objekts oder einer festen Formatierung von die Daten, anstatt diese Daten aus externen Quellen zu erhalten oder Daten zu generieren oder im Programm selbst mit der angegebenen Eingabe zu formatieren.

Hardcodierung wird als Antimuster angesehen.

Als Anti-Pattern-Methode erfordert die Hardcodierung, dass der Quellcode des Programms jedes Mal geändert wird, wenn sich die Eingabedaten oder das gewünschte Format ändern, wenn es für den Endbenutzer möglicherweise bequemer ist, die Details auf irgendeine Weise außerhalb des Programms zu ändern.

Manchmal kann man es nicht vermeiden, aber es sollte vorübergehend sein.

Oft ist eine harte Codierung erforderlich. Programmierer haben möglicherweise keine dynamische Benutzeroberflächenlösung für den Endbenutzer ausgearbeitet, müssen jedoch die Funktion bereitstellen oder das Programm freigeben. Dies ist normalerweise nur vorübergehend, löst jedoch kurzfristig den Druck, den Code zu liefern. Später wird eine Softcodierung durchgeführt, damit ein Benutzer Parameter weitergeben kann, mit denen der Endbenutzer die Ergebnisse oder Ergebnisse ändern kann.

  • Die Hardcodierung von Nachrichten erschwert die Internationalisierung eines Programms.
  • Hardcodierungspfade erschweren die Anpassung an einen anderen Standort.

Der einzige Vorteil der Hardcodierung scheint die schnelle Bereitstellung von Code zu sein.

9

"Ja wirklich?" Keine möglichen gültigen Anwendungsfälle?

Ich stimme zwar zu, dass Hardcodierung im Allgemeinen ein Anti-Pattern oder zumindest ein sehr schlechter Codegeruch ist, aber es gibt viele Fälle, in denen dies der Fall ist macht Sinn:

  • einfachheit ( YAGNI ),
  • die Eingabe ist tatsächlich konstant und ändert sich nie (dh sie repräsentiert eine natürliche oder geschäftliche Konstante oder eine Annäherung von eins, z. B. 0, PI, ...).
  • eingebettete Software (Speicher- und Zuordnungsbeschränkungen kommen in den Sinn),
  • sichere Software (diese Werte sind nicht verfügbar und/oder einfach zu dekodieren oder zurückzuentwickeln, z. B. kryptografische Token und Salze),
  • generierter Code (Ihr Präprozessor oder Generator ist konfigurierbar, spuckt jedoch Code mit fest codierten Werten aus),
  • und wahrscheinlich noch ein paar mehr.

Immer noch ein Anti-Pattern ? So ist Over-Engineering ! Es geht um die Lebenserwartung Ihrer Software !!

Nicht, dass ich damit sagen würde, dass es alle guten Gründe gibt, und im Allgemeinen würde ich hartcodierte Werte ablehnen. Aber einige können aus triftigen Gründen leicht einen Pass bekommen.

Und beaufsichtigen Sie nicht den ersten in Bezug auf Einfachheit/ YAGNI , indem Sie es für trivial halten: Es gibt wahrscheinlich keinen Grund, einen verrückten Parser und Wertprüfer für einen einfachen zu implementieren Skript, das einen Job für einen engen Anwendungsfall sehr gut erledigt.

Es ist schwierig, das Gleichgewicht zu finden. Manchmal sieht man nicht voraus, dass eine Software wächst und länger hält als das einfache Skript, als das sie gestartet wurde. Oft ist es jedoch umgekehrt: Wir überarbeiten Dinge, und ein Projekt wird schneller eingestellt, als Sie den Pragmatic Programmer lesen können. Sie haben Zeit und Mühe mit Dingen verschwendet, die ein früher Prototyp nicht brauchte.

Das ist das Gemeinste bei Anti-Patterns: Sie sind in beiden Extremen des Spektrums vorhanden, und ihr Erscheinungsbild hängt von der Empfindlichkeit der Person ab, die Ihren Code überprüft.

24
haylem

Es gibt Zeiten, in denen es in Ordnung ist, Werte hart zu codieren. Zum Beispiel gibt es einige Zahlen wie 0 oder einen oder verschiedene 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 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 gegeben haben, sehe ich nicht, wo Hardcodierung nützlich wäre. Alles, was Sie erwähnen, würde/sollte bereits in der Datenbank enthalten sein, einschließlich Überschriften. Sogar Dinge, die die Präsentation steuern (wie die Sortierreihenfolge), können hinzugefügt werden, wenn sie nicht vorhanden sind.

4
JimmyJames