2009-05-05 10 views
15

Ich fand die Wikipedia entry auf der weichen Codierung anti-Muster knapp und verwirrend. Was ist Soft Coding? In welchen Einstellungen ist es eine schlechte Übung (Anti-Pattern)? Wann könnte es auch als vorteilhaft betrachtet werden und wenn ja, wie sollte es umgesetzt werden?Was ist weiche Codierung? (Anti-Muster)

+0

Dies gilt nicht für Artikel Wikipedias auf softcoding aber ein nützlicher Trick ist manchmal Ihre Sprache wechseln von „English“ auf „Simple English“ auf Wikipedia. – Travis

Antwort

23

Kurze Antwort: Gehen Sie zu den Extremen, um harte Kodierung zu vermeiden und am Ende mit einer Monsterkonvolutions-Abstraktionsschicht zu enden, die schlimmer ist, als wenn die fest codierten Werte von Anfang an da gewesen wären. d.h. über das Engineering.

Like:

SpecialFileClass file = new SpecialFileClass(200); // hard coded 

SpecialFileClass file = new SpecialFileClass(DBConfig.Start().GetConnection().LookupValue("MaxBufferSizeOfSpecialFile").GetValue()); 
+10

Obwohl Sie immer noch eine Zeichenfolge dort haben. Das sollte wahrscheinlich in einer Konstante oder einer Eigenschaft irgendwo sein. – Kobi

+2

Aber wenn es camelCase ist, bekommt es es aus der Registry statt der DB, duh! –

3

Ola, ein gutes Beispiel für ein reales Projekt, das in das Konzept des softcoding gebaut hat, um es ist das Django Projekt. Die Datei settings.py abstrahiert bestimmte Dateneinstellungen, sodass Sie die Änderungen dort vornehmen können, anstatt sie in Ihren Code einzubetten. Sie können der Datei bei Bedarf auch Werte hinzufügen und sie bei Bedarf verwenden.

http://docs.djangoproject.com/en/dev/topics/settings/

Beispiel:

num_rows = 20 

dann innerhalb einer Ihrer Dateien, die Sie diesen Wert zugreifen konnte:

Dies ist ein Ausschnitt aus der Datei settings.py sein könnte

from django.conf import settings 
... 

for x in xrange(settings.num_rows): 
    ... 
+0

"num_rows" hier könnte ein wenig irreführend sein, und ein schlechtes Beispiel, da die Einstellungsdatei für globale und/oder anwendungsspezifische Einstellungen wie "default_comment_count", "template_directory" verwendet wird (sollte). 'num_rows' sieht etwas generisch aus. –

+0

Während dies ein Beispiel ist und die tatsächliche Variable wirklich keine Rolle spielen sollte, passt 'num_rows' tatsächlich in die Einstellungsdatei. Nehmen wir an, Sie haben ein paar Seiten mit Datentabellen in ihnen. Eine einfache Möglichkeit zum Verwalten der Anzahl der Zeilen, die in diesen Tabellen angezeigt werden, ist eine Variable in der Einstellungsdatei. – johannix

5

Die mai n Punkt der Daily WTF article on soft coding ist, dass wegen der vorzeitigen Optimierung und Angst ein System, das sehr gut definiert ist und es keine doppelte Kenntnisse ist verändert und komplexer wird ohne Notwendigkeit.

Die Hauptsache, die Sie beachten sollten, ist, wenn Ihre Änderungen tatsächlich Ihr System verbessern und vermeiden, leicht etwas als Anti-Muster zu beschriften und es auf alle Fälle zu vermeiden. Das Konfigurieren Ihres Systems und das Vermeiden von Hardcoding ist ein einfaches Mittel für doppeltes Wissen in Ihrem System (siehe Punkt 11: "DRY Do not Repeat Yourself" in The Pragmatic Programmer Quick Reference Guide) Dies ist der treibende Grund hinter dem Vorschlag, Hardcoding zu vermeiden. I.e. Es sollte idealerweise nur einen Platz in Ihrem System geben (das wäre Code oder Konfiguration), der geändert werden sollte, wenn Sie etwas so einfaches wie eine Fehlermeldung ändern müssen.

0

Die ultimative softcoding:

const float pi = 3.1415; // Don't want to hardcode this everywhere in case we ever need to ship to Indiana. 
+2

Das scheint mir gut - es vermeidet, Ihren Code mit magischen Zahlen zu überfluten, auch wenn diese Zahlen konstant und unveränderlich sind. – PaulJWilliams

+5

+1 für Indiana graben. –

+4

Ich denke, das ultimative Softcoding ist eher wie folgt: const int ONE = 1; const int ZWEI = 2; usw. – tfinniga

Verwandte Themen