Лучший способ избавиться от венгерской нотации? - PullRequest
5 голосов
/ 13 октября 2008

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

Вы бы реорганизовали имена переменных для удаления венгерской нотации или оставили бы их в покое?

Если вы решили изменить все переменные для удаления венгерской нотации, каким будет ваш метод?

Ответы [ 19 ]

1 голос
/ 14 октября 2008

Если у вас есть законная необходимость удалить и изменить его, я бы использовал либо встроенные инструменты рефакторинга, либо что-то вроде Resharper.

Тем не менее, я бы согласился с Крисом Конвеем на определенную точку зрения и спросил бы вас, ПОЧЕМУ, это раздражает, но в то же время, в большинстве случаев «если это не сломано, не исправить «метод действительно лучший путь!

1 голос
/ 14 октября 2008

Я бы не стал делать из этого проект. Я бы использовал инструменты рефакторинга в VS (на самом деле, я бы использовал Resharper'ы, но работа VS просто отлично) и исправил бы все переменные в любом методе, который мне нужно было изменить. Или, если бы мне пришлось вносить более масштабные изменения, я бы реорганизовал имена переменных в любом методе, к которому меня вызывали, чтобы понимал .

1 голос
/ 14 октября 2008

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

Я думал о том, чтобы задать аналогичный вопрос, только в моем случае код, вызывающий оскорбление, - мой собственный. У меня есть очень старая привычка использовать «плохой вид» венгерского из моих дней FoxPro (который имел слабую типизацию и необычную ограниченность) - привычка, которую я только недавно бросил.

Это сложно - это означает, что вы должны принять несовместимый стиль в вашей кодовой базе. Это было только неделю назад, когда я наконец сказал «винт» и начал имя параметра без буквы «p». Когнитивный диссонанс, который я сначала почувствовал, сменился чувством свободы. Мир не пришел к концу.

1 голос
/ 14 октября 2008

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

1 голос
/ 14 октября 2008

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

В качестве альтернативы, вы можете полностью исключить свои переменные и просто вернуть каждой функции 42.

0 голосов
/ 02 июня 2011

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

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

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

0 голосов
/ 25 ноября 2009

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

Примеры (идет в vimrc):

"" Hungarian notation conversion helpers
"" get rid of str prefixes and fix caps e.g. strName -> name
map ,bs /\Wstr[A-Z]^Ml3x~
map ,bi /\Wint[A-Z]^Ml3x~
"" little more complex to clean up m_p type class variables
map ,bm /\Wm_p\?[A-Z]^M:.s/\(\W\)m_p\?/\1_/^M/\W_[A-Z]^Mll~
map ,bp /\Wp[A-Z]^Mlx~
0 голосов
/ 14 октября 2008

Мне кажется, что большая проблема в том, что 200-метод Объект Бога класс. Я бы предположил, что рефакторинг только для того, чтобы убрать венгерскую нотацию, сам по себе является малоценной и рискованной деятельностью. Если в этом классе нет обильного набора автоматических модульных тестов, чтобы придать вам уверенность в вашем рефакторинге, я думаю, вы должны оставить его в покое и по-настоящему в покое.

Полагаю, маловероятно, что такой набор тестов существует, потому что разработчик, следуя методам TDD, (надеюсь), естественно, вообще избежал бы создания объекта God - было бы очень сложно написать всесторонние тесты.

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

И, если хотите, вы можете уничтожить венгерского на ходу.

0 голосов
/ 14 октября 2008

Я люблю венгерскую нотацию. Не понимаю, почему вы хотели бы избавиться от этого.

...