리팩토링 주석이있는 코드를 확산시키는 것이 좋은 생각입니까?


11

저는 "스파게티 코드"프로젝트를 진행 중이며 버그를 수정하고 새로운 기능을 구현하는 동안 코드를 단위로 테스트 할 수 있도록 리팩토링도합니다.

코드는 종종 너무 밀접하게 결합되거나 복잡하여 작은 버그를 수정하면 많은 클래스가 다시 작성됩니다. 그래서 리팩토링을 중단하는 코드 어딘가에 선을 그리기로 결정했습니다. 이를 명확히하기 위해 상황에 대해 설명하는 코드에 다음과 같은 주석을 추가합니다.

class RefactoredClass {
    private SingletonClass xyz;

    // I know SingletonClass is a Singleton, so I would not need to pass it here.
    // However, I would like to get rid of it in the future, so it is passed as a
    // parameter here to make this change easier later.
    public RefactoredClass(SingletonClass xyz) {
        this.xyz = xyz;
    }
}

또는 다른 케이크 조각 :

// This might be a good candidate to be refactored. The structure is like:
// Version String
//    |
//    +--> ...
//    |
//    +--> ...
//          |
//    ... and so on ...    
//
Map map = new HashMap<String, Map<String, Map<String, List<String>>>>();

이것이 좋은 생각입니까? 그렇게 할 때 무엇을 명심해야합니까?



3
이것은 의견 기반 주제입니다. 하지만 내 개인적인 의견은이 점이다 정확히 유용 주석의 유형, 나는 다른 사람의 코드에서 찾을 텐데 것을 : 그것은 당신에게 이미 코드에서 명확하지 않다 중요한 정보를 알려줍니다; 아니 무슨 방법 않지만, .
Kilian Foth

2
HashMap <문자열, 맵 <문자열, 맵 <문자열, 목록 <문자열 >>>> : o
margabit

5
코드 조각이 냄새가 나는지 알려주는 의견 은 엄청나게 감사합니다. 코드베이스에 대해 이해하지 못했을 수도 있으므로 문제를보고 "What fuck?"을 생각할 것입니다. 그러나 그 이유를 설명하는 주석은 코드를 더 빨리 돌파하는 데 도움이됩니다. 그렇습니다. (물론 WTF가 아닌 코드를 고칠 수 없다고 가정!)
Phoshi

답변:


13

리팩토링 주석이있는 코드를 확산시키는 것이 좋은 생각입니까?

리팩토링을 완료하는 데 시간을 할애하고 실제로 수행하면 가능합니다.

그렇게 할 때 무엇을 명심해야합니까?

최신 IDE에는 TODO 라인을 찾아 표시하는 옵션이 있습니다. 때때로 확인하고 가능할 때마다 숫자를 줄이십시오.


2

doxygen 또는 javadoc 용 설치하기 쉬운 사용자 정의 태그에 대한 고려 사항을 /// @todo주석으로 작성 하여 API 문서의 todo 섹션으로 자동 추출됩니다. 평범한 주석은 너무 쉽게 간과 될 수 있으며 결국 코드 깊이에서 길을 잃게됩니다.


[편집] BTW : 이것이 좋은 생각입니까 :

버그를 수정하고 새로운 기능을 구현하는 동안 코드를 단위로 테스트 할 수 있도록 리팩토링을 수행합니다.

리팩토링은 특히 단위 테스트가없는 경우 리팩토링이 매우 위험 할 수 있다고 생각합니다. 따라서 할일 코멘트를 추가하는 것에 대한 추가 작업 (버그 수정 등)을 제한하는 것이 좋습니다 ...


질문의 코드 스 니펫은 Java와 비슷합니다. 왜 Doxygen을 추천합니까?
gnat

doxygen이 @todo를 지원한다는 것을 알았습니다 .javadoc의 경우 확실하지 않습니다. 필자의 관점에서 Java 예제는 더 깊은 문제를 보여주었습니다.
Wolf

1
@ gnat : 지금은 더 나은 것 같아요?
Wolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.