Жесткое кодирование — это нормально. Ненадолго

TL;DR: не оставляйте жестко запрограммированный беспорядок в IF.

Проблемы

  • Тестируемость
  • Жестко закодированные значения
  • Нарушение открытого/закрытого принципа

Решения

  1. Замените все ЕСЛИ динамическим условием или полиморфизмом.

Контекст

Жесткое кодирование условий iF отлично подходит для разработки через тестирование.

Нам нужно убрать вещи.

Образец кода

Неправильный

private string FindCountryName (string internetCode)
{
  if (internetCode == "de")
    return "Germany";
  else if(internetCode == "fr") 
    return "France";
  else if(internetCode == "ar")
    return "Argentina";
    //lots of elses
  else
    return "Suffix not Valid";
}

Верно

private string[] country_names = {"Germany", "France", "Argentina"} //lots more
private string[] Internet_code_suffixes= {"de", "fr", "ar" } //more
private Dictionary<string, string> Internet_codes = new Dictionary<string, string>();
//There are more efficient ways for collection iteration
//This pseudocode is for illustration
int currentIndex = 0; 
foreach (var suffix in Internet_code_suffixes) {
  Internet_codes.Add(suffix, Internet_codes[currentIndex]);
  currentIndex++;
}
private string FindCountryName(string internetCode) {
  return Internet_codes[internetCode];
}

Обнаружение

[Х] Автоматически

Проверяя условия If/else, мы можем обнаружить жестко закодированные условия.

Теги

  • ЕСЛИ

Заключение

В прошлом жесткое кодирование было невозможно.

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

связи





Больше информации

Кредиты

Фото автора Джессика Джонстон на Unsplash

Не будьте (слишком) умными. Моя цель состояла в том, чтобы не поощрять слишком умный код, потому что «умный код» сложно написать, легко ошибиться, сложнее поддерживать и часто он не быстрее, чем более простые альтернативы, потому что его сложно оптимизировать.

Бьерн Страуструп



Эта статья является частью серии CodeSmell.