문제

200 개의 정적 메소드가있는 한 클래스를 사용하여 핵심 기능 (예 : 데이터베이스 조회)을 제공하는 C# 코드베이스를 상속했다고 가정 해 봅시다. 그 계급의 많은 악몽 중에서 헝가리 표기법 (나쁜 종류)이 풍부하게 사용됩니다.

헝가리 표기법을 제거하기 위해 변수 이름을 리팩토링 하시겠습니까, 아니면 내버려 두겠습니까?

헝가리 표기법을 제거하기 위해 모든 변수를 변경하기로 선택한 경우 방법은 무엇입니까?

도움이 되었습니까?

해결책

그냥 내버려 두십시오. 시간을 더 잘 사용합니다.

다른 팁

Refactor- 그 척도에서 헝가리 표기법은 실제로 코드의 자연스러운 가독성을 방해하며 운동은 거기에있는 것에 익숙해지는 좋은 방법입니다.

그러나 코드 기반을 알고있는 다른 팀원이있는 경우 리팩토링에 대한 합의가 필요하며 변수가 하나의 프로젝트 외부에 노출되면 내버려 두어야합니다.

변수 이름 인 refactor-> Rename을 마우스 오른쪽 버튼으로 클릭하십시오.

이 작업을 수행하는 ADD 인도 있지만 내장 방법은 나에게 적합합니다.

내가 어떻게할까요? 코드를 유지하고 중요한 방법을 다시 작성하지 않아야한다고 가정합니까? 잘 내버려 두십시오. 그리고 내가 하다 코드를 추가하고 기존 스타일로 이동하십시오.

그러나, 당신이 정말로 당신이 있다면 Hankerin 'fer refactorin' 그런 다음 한 번에 조금만하십시오. 작업 할 때마다 변수를 바꾸는 데 10 분을 소비합니다. 일을 조금 정리합니다. 몇 달 후에는 휘파람처럼 깨끗하다는 것을 알 수 있습니다 ....

두 종류의 헝가리 표기법이 있다는 것을 잊지 마십시오.

앱의 헝가리 인으로 알려진 원래 Charles Simonyi HN과 나중에 Peckerhead (기술 용어)가 완전히 잘못 읽은 후 System Hungagarian이라고 불리는 후기 혐오 Simonyi의 원래 종이.

불행하게도, 시스템 HN은 Petzold와 다른 사람들에 의해 전파되어 오늘날처럼 정당하게 인식되는 더 지배적 인 낙태가되었습니다.

Joel 's를 읽으십시오 훌륭한 기사 원래 앱의 의도에 대해 헝가리어 표기법에 대해서는 서두르고 잃어버린 것에 대해 죄송합니다.

앱의 헝가리 인이라면 원래 Charles Simonyi 기사와 Joel 기사를 모두 읽은 후에는 보관하고 싶을 것입니다.

시스템 헝가리 인 시스템 더미에 착륙했다면?

모든 베팅이 꺼져 있습니다!

아휴! (코를 잡고있는 동안 말했다) (-:

운이 좋고 헝가리 인이 사라지기를 원한다면, 사용되는 헝가리 접두사를 분리하고 검색을 시도하고 파일을 교체하여 대체하십시오. 아무것도 아님, 그런 다음 깨끗하고 재건하십시오. 오류 수가 작 으면 고정하십시오. 오류 수가 엄청나면, 돌아가서 논리적으로 (도메인 별) 클래스로 나누면 개별적으로 이름을 바꿉니다 (IDE가 도움이됩니다).

나는 VB6 일에 종교적으로 그것을 사용했지만 VB.NET가 나왔을 때 중단되었습니다. 그것이 새로운 VB 가이드 라인이 말한 것이기 때문입니다. 다른 개발자들은 그렇지 않았습니다. 그래서 우리는 그것에 대해 많은 오래된 코드를 가지고 있습니다. 코드에서 유지 보수를 할 때는 함수/메소드/하위 I 터치에서 표기법을 제거합니다. 나는 한 번에 그것을 모두 제거하지 않을 것입니다 ~하지 않는 한 당신이있어 정말 좋은 단위 테스트 모든 것을 위해, 그리고 아무것도 깨지 않았다는 것을 증명하기 위해 그들을 달릴 수 있습니다.

이 작업을 수행하여 얼마를 끊을 건가요? 그것은 스스로에게 물어 보는 중요한 질문입니다. 해당 라이브러리를 사용하는 다른 코드가 많이 있다면 이름을 바꾸는 운동을 통해 사람들을위한 작업을 만들 수 있습니다.

리팩토링 할 때해야 할 일 목록에 올려 놓았습니다. 적어도 모든 사람은 당신이 도서관을 깨뜨릴 것으로 기대합니다 (일시적으로).

즉, 나는 명명 된 방법과 변수에 대해 완전히 좌절감을 느끼므로 관련 될 수 있습니다.

나는 프로젝트를 만들지 않을 것입니다. 나는 vs의 리팩토링 도구를 사용하고 (실제로는 Resharper 's를 사용하지만 vs의 작품은 괜찮습니다) 수정하도록 요청 된 모든 방법의 모든 변수를 수정합니다. 또는 더 큰 규모를 변경해야한다면, 내가 요청한 모든 방법의 변수 이름을 리팩터링합니다. 이해하다.

합법적으로 제거하고 변경 해야하는 경우 내장 리팩토링 도구 또는 Resharper와 같은 것을 사용합니다.

그러나 나는 Chris Conway와 특정 관점에 동의하고 왜 당신에게 왜 짜증나지만, 동시에, 동시에 "그것이 해결되지 않으면 해결되지 않으면"방법이 있습니다. 정말 가장 좋은 방법입니다!

직접 사용할 때만 변경하십시오. 그리고 여전히 작동하는지 확인하기 위해 적용 할 수있는 테스트 벤치가 있는지 확인하십시오.

헝가리 표기법을 단계적으로 폐지하는 가장 좋은 방법은 코드를 수정할 때 코드를 리팩토링하는 것입니다. 이러한 종류의 리팩토링을 수행하면 가장 큰 이점은 손가락을 건너 안전망이 있고 기존 기능을 중단하지 않기를 바라고있는 안전망을 갖도록 수정하는 코드 주위에 단위 테스트를 작성해야한다는 것입니다. 이 단위 테스트를 마련하면 코드를 마음의 내용으로 자유롭게 변경할 수 있습니다.

더 큰 문제는 200 (!) 방법을 가진 단일 클래스가 있다는 것입니다!

이것이 크게 변경된 클래스에 크게 의존한다면, 그것을 더욱 사용할 수 있도록 리팩토링 할 가치가있을 수 있습니다.

이에서 Resharper는 절대적인 필수입니다 (내장 리팩토링 물건을 사용할 수 있지만 Resharper는 더 좋습니다).

관련 방법 그룹을 찾아 시작한 다음 이것을 멋진 작은 응집력 수업으로 리팩토링하십시오. 최신 코드 표준을 준수하도록 업데이트하십시오.

테스트 스위트를 컴파일하고 실행하십시오.

더 많은 에너지가 있습니까? 다른 수업을 추출하십시오.
마모 - 문제 없음; 돌아와서 내일 좀 더하세요. 며칠 만에 짐승을 정복했을 것입니다.

나는 @booji에 동의합니다. 다른 이유 때문에 이미 코드를 방문 할 때 라우팅 당 수동으로 수동으로 수행하십시오. 그런 다음 가장 일반적인 사람들을 얻지 못하고 나머지는 누가 걱정할 수 있습니다.

나는 비슷한 질문을 할 생각을하고 있었는데, 제 경우에만 불쾌한 코드는 내 자신의 것입니다. 나는 FoxPro 시절 (약한 타이핑과 특이한 범위를 가진)의 헝가리 인 "나쁜 종류"를 사용하는 아주 오래된 습관이 있습니다.

어렵습니다 - 그것은 코드 기반에서 일관되지 않은 스타일을 수용하는 것을 의미합니다. 일주일 전만해도 마침내 "나사"라고 말했고 문자 "P"가없는 매개 변수 이름을 시작했습니다. 내가 처음 느낀인지 불협화음은 자유의 느낌을 주었다. 세상은 끝나지 않았습니다.

내가이 문제를 해결하는 방식은 한 번에 하나의 변수를 만나면서 한 번에 하나의 변수를 변경 한 다음 더 심층적 인 변경을하기 위해 돌아올 때 더 많은 변화를 수행하는 것입니다. 당신이 나와 같은 사람이라면, 당신의 변수의 다른 명명법은 당신을 잠시 동안 미치게 만들지 만 천천히 익숙해 질 것입니다. 열쇠는 필요한 곳에 모든 것이 가질 때까지 한 번에 조금 칩을칩니다.

또는 변수를 모두 제기하고 모든 기능이 42를 반환하도록 할 수 있습니다.

더 큰 문제는 나에게 나에게 들리는 것 같다. 신의 대상 수업. 헝가리 표기법을 제거하기 위해 리팩토링은 그 자체로 저가의 고위험 활동이라고 제안합니다. 해당 클래스 주변에 풍부한 자동화 된 단위 테스트 세트가 없다면 리팩토링에 대한 확신을주는 것이 아니라면 잘하고 진정으로 홀로 남겨 두어야한다고 생각합니다.

TDD 관행에 따른 개발자가 (희망적으로) 처음부터 신의 대상을 건설하는 것을 자연스럽게 피했기 때문에 그러한 시험 세트가 존재하지 않을 것 같아요.

그러나 God Object를 제거하고 단위 테스트 기반을 확보하는 것이 더 높은 가치입니다. 저의 조언은 클래스 자체를 리팩토링 할 수있는 기회를 찾는 것입니다. 아마도 적절한 비즈니스 요구 사항/변경이 발생하여 해당 코드의 변경이 필요할 때 (따라서 일부 시스템 및 회귀 테스트와 함께 구입하고 지불 한). 한 번에 모든 일을 리팩토링하려는 노력을 정당화 할 수는 없지만 기회가 올 때 한 조각으로 할 수 있으며 변경 사항을 테스트 할 수 있습니다. 이러한 방식으로 스파게티 코드를 포괄적 인 단위 테스트를 통해 비트 단위로 천천히 세정 코드베이스로 변환 할 수 있습니다.

그리고 당신이 원한다면 갈 때 헝가리 인을 제거 할 수 있습니다.

나는 실제로 애플리케이션 확장을 위해 여기서 같은 일을하고 있습니다. 저의 접근 방식은 VIM Mapping을 사용하여 특정 헝가리 표기법 접두사를 검색 한 다음 삭제하고 자본화를 적절하게 수정하는 것이 었습니다.

예제 (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~

리팩토링을 위해 코드를 깨뜨릴 경우, 그 코드에 의존 할 수있는 팀의 다른 사람들에게 영향을 줄 경우 특히 혼자 내버려 두는 것을 진지하게 고려할 것입니다.

이 리팩토링에 팀이 괜찮고,이 작업을 수행하는 데 시간을 투자하는 경우 (코드가 더 읽기 쉬우거나 유지 관리 가능하다는 것을 의미하는 경우 미래의 시간 절제자 일 수 있음) Visual Studio (또는 사용중인 IDE를 사용하는 경우) ) 코드를 리팩터링하는 데 도움이됩니다.

그러나 이와 같은 큰 변화가 당신의 팀/보스가 기꺼이받을 위험이 없다면, 나는 다소 정통적이고 반쯤 접근 할 것을 제안 할 것입니다. 단일 스윕으로 모든 리팩토링을 수행하는 대신 정상적인 유지 보수 중에 터치 해야하는 코드 (보다 구체적으로 기능)의 리팩터 섹션이없는 이유는 무엇입니까? 시간이 지남에 따라이 느린 리팩토링은 코드를 클리너 상태로 가져 오며,이 시점에서 최종 스윕으로 리팩토링 프로세스를 완료 할 수 있습니다.

나는 헝가리 표기법을 좋아합니다. 왜 그것을 제거하고 싶은지 이해하지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top