2009-05-05 2 views
15

Ho trovato il Wikipedia entry sul soft code anti-pattern terso e confuso. Quindi cos'è il soft coding? In quali impostazioni è una cattiva pratica (anti-pattern)? Inoltre, quando potrebbe essere considerato utile e, in caso affermativo, come dovrebbe essere implementato?Che cos'è la codifica software? (Anti-pattern)

+0

Questo non vale per l'articolo di Wikipedia su softcoding ma un piccolo trucco utile a volte è quello di cambiare la lingua da "inglese" a "Simple inglese" su Wikipedia. – Travis

risposta

23

Risposta breve: andare agli estremi per evitare l'hard coding e finire con un mostro di contorto strato di astrazione per mantenere ciò che è peggio che se i valori codificati fossero stati lì dall'inizio. cioè sopra l'ingegneria.

come:

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

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

Tuttavia, hai ancora una stringa lì. Quello dovrebbe probabilmente essere in una costante o in una proprietà da qualche parte. – Kobi

+2

Ma se è CamelCase, lo ottiene dal Registro invece che dal DB, duh! –

3

Ola, un buon esempio di un progetto reale che ha il concetto di softcoding integrato ad esso è il progetto Django. Il loro file settings.py astrae alcune impostazioni dei dati in modo che tu possa apportare le modifiche lì invece di inserirle nel tuo codice. È inoltre possibile aggiungere valori a quel file se necessario e utilizzarli dove necessario.

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

Esempio:

Questo potrebbe essere un frammento dal file settings.py:

num_rows = 20 

Poi all'interno di uno dei file è possibile accedere a tale valore:

from django.conf import settings 
... 

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

"num_rows" qui potrebbe essere un po 'fuorviante e un pessimo esempio, poiché il file delle impostazioni è (dovrebbe essere) utilizzato per impostazioni globali e/o specifiche dell'applicazione come "default_comment_count", "template_directory". 'num_rows' sembra un po 'generico. –

+0

Mentre questo è un esempio e la variabile effettiva in realtà non dovrebbe avere importanza, "num_rows" si adatta effettivamente al file delle impostazioni. Diciamo che hai un paio di pagine con tabelle di dati in esse. Un modo semplice per gestire il numero di righe che appaiono all'interno di quelle tabelle è con una variabile nel file delle impostazioni. – johannix

5

Il mai Il punto n. Daily WTF article on soft coding è quello a causa dell'ottimizzazione prematura e la paura di un sistema che è molto ben definito e non esiste una conoscenza duplicata che viene alterata e diventa più complessa senza alcuna necessità.

La cosa principale da tenere a mente è se le modifiche effettivamente migliorano il sistema ed evitare di etichettare leggermente qualcosa come anti-pattern ed evitarlo con ogni mezzo. Configurare il sistema ed evitare l'hardcoding è una semplice cura per la conoscenza duplicata nel sistema (vedere il punto 11: "DRY Do not Repeat Yourself" in The Pragmatic Programmer Quick Reference Guide) Questa è la necessità trainante del suggerimento di evitare l'hardcoding. Cioè dovrebbe esserci idealmente solo un posto nel tuo sistema (che sarebbe codice o configurazione) che dovrebbe essere modificato se devi cambiare qualcosa di semplice come un messaggio di errore.

0

Il massimo in softcoding:

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

Questo mi sembra soddisfacente: evita di ingombrare il codice con numeri magici, anche se questi numeri sono costanti e immutabili. – PaulJWilliams

+5

+1 per Indiana dig. –

+4

Penso che il massimo nel softcoding sia più simile a: const int ONE = 1; const int TWO = 2; ecc. – tfinniga