Что такое мягкое кодирование? (Анти-паттерн)
Я нашел запись в Википедии о мягкой кодировке с узором и смущением. Итак, что такое мягкое кодирование? В каких настройках это плохая практика (анти-шаблон)? Кроме того, когда это можно считать полезным, и если да, то каким образом это должно быть реализовано?
Ответы
Ответ 1
Короткий ответ: переходим к крайностям, чтобы избежать жесткого кодирования и заканчивая каким-то монстрами извилистым уровнем абстракции, чтобы поддерживать это хуже, чем если бы с самого начала были жестко закодированные значения. т.е. над разработкой.
Как
SpecialFileClass file = new SpecialFileClass( 200 ); // hard coded
SpecialFileClass file = new SpecialFileClass( DBConfig.Start().GetConnection().LookupValue("MaxBufferSizeOfSpecialFile").GetValue());
Ответ 2
Основной темой ежедневной статьи WTF по мягкому кодированию является то, что из-за преждевременной оптимизации и страха система, которая очень хорошо определена и там нет дублированных знаний, которые изменяются и становятся более сложными без какой-либо необходимости.
Главное, что вы должны иметь в виду, - это то, что ваши изменения действительно улучшают вашу систему и избегают легко маркировать что-то как анти-шаблон и избегать его во что бы то ни стало. Конфигурирование вашей системы и предотвращение жесткого кодирования - это простое средство для дублирования знаний в вашей системе (см. Пункт 11: "DRY Do not Repeat Yourself" в Краткий справочник по программированию Pragmatic Руководство). Это заставляет задуматься о том, чтобы избежать жесткого кодирования. То есть в идеале должно быть только одно место в вашей системе (это будет код или конфигурация), которые должны быть изменены, если вам нужно изменить что-то так же просто, как сообщение об ошибке.
Ответ 3
Ola, хороший пример реального проекта, в который встроена концепция мягкого кодирования, - проект 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):
...
Ответ 4
Конечная точка в мягком кодировании:
const float pi = 3.1415; // Don't want to hardcode this everywhere in case we ever need to ship to Indiana.