Какие типы кодирования антишаблонов Вы всегда осуществляете рефакторинг при пересечении их?

Синтаксис, который вы используете для определения type_info_impl, неверен.

Использование

template<int N, typename... Ts>
    struct type_info_impl<N, Ts...> { ...};

можно, если вы пытаетесь специализировать шаблон класса. Чтобы определить базовый шаблон класса, удалите бит <N, Ts...>. Просто используйте

template<int N, typename... Ts>
    struct type_info_impl { ...};
7
задан Blorgbeard 23 December 2008 в 23:09
поделиться

18 ответов

Я однажды осуществлял рефакторинг и столкнулся с чем-то вроде этого код:

string strMyString;
try
{
  strMyString = Session["MySessionVar"].ToString();
}
catch
{
  strMyString = "";
}

Resharper указал, что.ToString () был избыточен, таким образом, я вынул его. К сожалению, это закончило тем, что взломало код. Каждый раз, когда MySessionVar был пустым, он не вызывал NullReferenceException, на который код полагался для столкновения его вниз к блоку выгоды. Я знаю, это было некоторым печальным кодом. Но я действительно извлекал хороший урок из него. Быстро не проходите старый код, полагающийся на инструмент, чтобы помочь Вам сделать, рефакторинг - думает это через себя.

Я действительно заканчивал тем, что осуществил рефакторинг его следующим образом:

string strMyString = Session["MySessionVar"] ?? "";

Обновление: Так как это сообщение является upvoted и технически не содержит ответ на вопрос, я полагал, что должен на самом деле ответить на вопрос. (Хорошо, это беспокоило меня до такой степени, что мне на самом деле снился он.)

Лично я задаю мне несколько вопросов перед рефакторингом.

1) Система при управлении исходным кодом? Если так, разрешение и осуществляет рефакторинг, потому что можно всегда откатывать, если что-то повреждается.

2) Модульные тесты существуют для функциональности, которую я изменяю? Если так, большой! Осуществить рефакторинг. Опасность здесь состоит в том, что существование модульных тестов не указывает на точность и объем упомянутых модульных тестов. Хорошие модульные тесты должны взять любые изменения повреждения.

3) Я полностью понимаю код, который я осуществляю рефакторинг? Если нет никакого управления исходным кодом и никаких тестов, и я действительно не понимаю код, который я изменяю, это - красный флаг. Я должен был бы стать более довольным кодом перед рефакторингом.

В случае, если № 3, я, вероятно, провел бы время для фактического отслеживания всего кода, который в настоящее время использует метод, который я осуществляю рефакторинг. В зависимости от объема кода это могло быть легко или невозможно (т.е. если это - общедоступный API). Если это сводится к тому, чтобы быть общедоступным API затем, действительно необходимо понять исходное намерение кода с бизнес-точки зрения.

15
ответ дан 6 December 2019 в 04:54
поделиться

Я склонен осуществлять рефакторинг глобальные константы и перечисления вполне немного, если их можно считать, минимум осуществляют рефакторинг риск. Возможно, это просто быть, но что-то как перечисление ClientAccountStatus должно быть в или близко к классу ClientAccount вместо того, чтобы находиться в классе GlobalConstAndEnum.

0
ответ дан 6 December 2019 в 04:54
поделиться

Я пытаюсь осуществить рефакторинг на основе следующих факторов:

  1. Я понимаю достаточно для знания то, что происходит?
  2. Я могу легко вернуться назад, если это изменение взламывает код.
  3. У меня будет достаточно времени для возвращения изменения назад, если оно повредит сборку.

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

Мой домен был мобильным программным обеспечением (сотовые телефоны), где большая часть кода находится на моем ПК, и привычка влияют на других. Так как я также поддерживаю систему сборки CI для своей компании, я могу выполнить сборку готового продукта (для всех телефонов) на пересмотренном коде, чтобы гарантировать, что это не повреждает ничто больше. Но это - моя персональная роскошь, которую Вы не можете иметь.

0
ответ дан 6 December 2019 в 04:54
поделиться

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

0
ответ дан 6 December 2019 в 04:54
поделиться

Я склонен осуществлять рефакторинг очень длинные функции и методы, если я понимаю набор вводов и выводов к блоку.

Это помогает удобочитаемости никакой конец.

0
ответ дан 6 December 2019 в 04:54
поделиться

Рефакторинг ради него является одним из корней всего зла. Никогда не делайте этого. (Модульные тесты действительно несколько смягчают это).

0
ответ дан 6 December 2019 в 04:54
поделиться

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

  • Говорите с автором кода (не всегда возможный) для выяснения то, что делает та часть кода. Даже если для меня относительно того, очевидно, что делает часть кода, это всегда помогает понять объяснение позади, почему автор, возможно, решил сделать что-то определенным способом. Пребывание в течение нескольких минут, говоря об этом не только помогло бы исходному автору понять Вашу точку зрения, это также строит доверительные отношения в команде.
  • Знайте или узнайте то, что та часть кода делает для тестирования его после рефакторинга (Процесс сборки с модульными тестами очень полезен здесь. Это делает все это быстрым и легким). Выполните модульные тесты прежде и после изменения и удостоверьтесь, что ничто не повреждается из-за Ваших изменений.
  • Отошлите головы до команды (при работе с другими) и сообщите им предстоящего изменения, таким образом, никто не удивлен, когда изменение на самом деле происходит
0
ответ дан 6 December 2019 в 04:54
поделиться

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

исключая:

if (condition) {
  //lots of code
  //returns value
} else {
  return null;
}

становится:

if (!condition)
  return null;

//lots of code..
//return value

вспыхивание рано уменьшает дополнительные отступы и уменьшает длинные биты кода... также как правило мне не нравятся методы больше чем с 10-15 строками кода. Мне нравится, когда методы имеют исключительную цель, даже если, создавая больше закрытых методов внутренне.

1
ответ дан 6 December 2019 в 04:54
поделиться

Обычно я не осуществляю рефакторинг код, если я просто просматриваю его, не активно работая над ним.

Но иногда ReSharper указывает на некоторый материал, которому я просто не могу сопротивляться к Alt+Enter.:)

1
ответ дан 6 December 2019 в 04:54
поделиться

Больше, чем (возможно) три или четыре строки дублирующего кода всегда заставляют меня думать о рефакторинге. Кроме того, я склонен перемещаться, кодируют много, извлекая код, который я предсказываю, чтобы использоваться более часто в отдельное место - класс с его собственной четко определенной целью и обязанностями или статическим методом статического класса (обычно помещаемый в мой Utils.* пространство имен).

Но, для ответа на вопрос, да, существует партия случаев, когда создание кода короче не обязательно означает делать, это хорошо структурировало и читаемый. Используя?? оператор в C# является другим примером. О чем также необходимо думать, новые возможности на предпочтительном языке - например, LINQ может использоваться, чтобы сделать некоторый материал очень изящным способом, но также и может сделать очень простую вещь очень нечитабельной и чрезмерно сложной. Необходимо взвесить эти два вещь очень тщательно, в конце все это сводится к персональному вкусу и, главным образом, опыт.

Ну, это - другой, "это зависит" ответ, но я боюсь, что это должно быть.

1
ответ дан 6 December 2019 в 04:54
поделиться

Если бы осуществление рефакторинг делает код намного легче читать, наиболее распространенным для меня был бы дублирующий код, например, если/еще это только отличается первыми/последними командами.

if($something) {
  load_data($something);
} else {
  load_data($something);
  echo "Loaded";
  do_something_else();
}
1
ответ дан 6 December 2019 в 04:54
поделиться

Я только потрудился изменять его, если существует некоторая другая причина, я изменяю код.

То, как далеко я готов взять его, зависит от того, насколько уверенный я - то, что я ничего не буду повреждать и как обширный мои собственные изменения в коде будут.

3
ответ дан 6 December 2019 в 04:54
поделиться

Для простого рефакторинга я пытаюсь очистить глубоко вложенные управляющие структуры и действительно долгие функции (больше чем одна экранная ценность текста). Однако не прекрасная идея осуществить рефакторинг код без серьезного основания (особенно в многочисленной команде разработчиков). В целом, если рефакторинг не сделает большое улучшение в коде или зафиксирует вопиющий грех, я пытаюсь оставить достаточно хорошо одним.

Не рефакторинг на - говорит, но так же, как вопрос общего обслуживания я обычно делаю этот материал, когда я запускаю работу над модулем:

  • Удалите глупые комментарии
    • Комментарии, в которых говорится, что не что иное как функциональная подпись уже говорят
    • Комментарии, которые являются чистым идиотизмом как, "на что он похож"
    • Журналы изменений наверху файла (у нас есть управление версиями по причине),
    • Любые документы API, которые явно не синхронизированы с кодом
  • Удалите прокомментированные блоки кода
  • Добавьте теги управления версиями как $Id$, если они отсутствуют
  • Устраните пробельные проблемы (это может быть раздражающим другим, хотя, потому что Ваше имя собирается для большого количества строк в разности, даже если все Вы сделали, был изменить пробел),
    • Удалите пробел в конце строк
    • Вкладки изменения-> пробелы (для этого наша конвенция, где я работаю),
3
ответ дан 6 December 2019 в 04:54
поделиться

Это - большая ситуация для показа преимуществ модульных тестов.

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

Без модульных тестов упрощая сложный код это заполнено подарками вуду большой риск взлома кода и даже знания, что Вы представили новую ошибку! Таким образом, большинство разработчиков будет следовать осторожным маршрутом и идти дальше.

3
ответ дан 6 December 2019 в 04:54
поделиться

Это - маленький, незначительный антишаблон, но он так раздражает меня, что каждый раз, когда я нахожу его, я сразу вычеркиваю его. В C (или C++ или Java)

if (p)
    return true;
else
    return false;

становится

return p;

В схеме,

(if p #t #f)

становится

p

и в ML

if p then true else false

становится

p

Я вижу этот антишаблон почти исключительно в коде, написанном студентами бакалавриата. Я определенно не составляю это!!

6
ответ дан 6 December 2019 в 04:54
поделиться

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

5
ответ дан 6 December 2019 в 04:54
поделиться

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

7
ответ дан 6 December 2019 в 04:54
поделиться

Удаление / обновление комментариев, которые явно неверны или явно бессмысленны.
Их удаление - это:

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

Это единственный известный мне рефакторинг на 100% без риска.

Обратите внимание, что выполнение этого в структурированных комментариях, таких как комментарии javadoc, - другое дело. Их изменение сопряжено с риском, поскольку они очень будут исправлены / удалены, но не лишены некоторых гарантированных исправлений, как это было бы со стандартными комментариями неправильного кода.

0
ответ дан 6 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: