2009-05-05 1 views
15

Я нашел Wikipedia entry на мягком кодировании, обрамлении и смущении. Итак, что такое мягкое кодирование? В каких настройках это плохая практика (анти-шаблон)? Кроме того, когда это можно считать полезным, и если да, то как его реализовать?Что такое мягкое кодирование? (Anti-pattern)

+0

Это не относится к статье Википедии о softcoding но полезная маленькая хитрость иногда перевести свой язык от «английского» на «Простой английский» в Википедии. – Travis

ответ

23

Короткий ответ: переход в крайности, чтобы избежать жесткого кодирования, и в конечном итоге с помощью некоторого сложного слоя абстракции, чтобы поддерживать это хуже, чем если бы с самого начала были жестко закодированные значения. т. е. над разработкой.

Как:

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

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

Хотя у вас все еще есть строка. Вероятно, это должно быть где-то в постоянной или какой-либо собственности. – Kobi

+2

Но если это camelCase, он получает его из реестра вместо DB, duh! –

3

Ола, хороший пример реального проекта, который имеет концепцию softcoding встроено в это Django проект. Их файл settings.py позволяет абстрагировать определенные параметры данных, чтобы вы могли вносить туда изменения, а не встраивать их в свой код. Вы также можете добавить значения в этот файл и при необходимости использовать их.

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

Пример:

Это может быть фрагментом из settings.py файла:

num_rows = 20 

Затем в одном из файлов вы можете получить доступ к этому значению:

from django.conf import settings 
... 

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

«num_rows» здесь может быть немного вводить в заблуждение и плохой пример, поскольку файл настроек (должен быть) использован для глобальных и/или конкретных приложений, таких как «default_comment_count», «template_directory». 'num_rows' выглядит несколько обобщенным. –

+0

Принимая во внимание, что это пример, и фактическая переменная действительно не имеет значения, «num_rows» действительно вписывается в файл настроек. Допустим, у вас есть пара страниц с таблицами данных. Простой способ управления количеством строк, отображаемых в этих таблицах, - это переменная в файле настроек. – johannix

5

май n точка Daily WTF article on soft coding заключается в том, что из-за преждевременной оптимизации и страха система, которая очень хорошо определена и нет дублированных знаний, изменяется и становится более сложной без какой-либо необходимости.

Главное, что вы должны иметь в виду, - если ваши изменения действительно улучшают вашу систему и избегают легко маркировать что-то как анти-шаблон и избегать его всеми средствами. Конфигурирование вашей системы и предотвращение жесткого кодирования - это простое средство для дублирования знаний в вашей системе (см. Пункт 11: «DRY Do not Repeat Yourself» в The Pragmatic Programmer Quick Reference Guide). Это основная потребность в предотвращении жесткого кодирования. То есть в идеале должно быть только одно место в вашей системе (это будет код или конфигурация), которые должны быть изменены, если вам нужно изменить что-то столь же простое, как сообщение об ошибке.

0

Конечной в softcoding:

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

Это кажется мне прекрасным - это позволяет избежать загромождения вашего кода магическими числами, даже если эти числа являются постоянными и неизменными. – PaulJWilliams

+5

+1 для Индианы. –

+4

Я думаю, что конечная в softcoding больше похожа: const int ONE = 1; const int TWO = 2; и т. Д. – tfinniga