OO 언어 (예 : Java로 제한되지 않음)에서 발생 범위에 따라 중복 코드를 어떻게 수정합니까? 나는 예를 들어 시작할 것이다.
- 동일한 클래스 (범위)에서 추출 방법 리팩토링 (수정)을 수행하십시오.
- 동일한 계층 구조 (범위)의 클래스에서 추출 방법 및 풀업 (수정)을 수행합니다.
- ...
OO 언어 (예 : Java로 제한되지 않음)에서 발생 범위에 따라 중복 코드를 어떻게 수정합니까? 나는 예를 들어 시작할 것이다.
답변:
최근에 나는 Uncle Bob의 "Clean Code"에서 내 질문에 대한 좋은 답변을 찾았습니다. 그는 세 가지 유형의 복제를 차별화합니다.
동일한 코드 조각은 단일 방법으로 교체해야합니다. 그래서 해결책은 방법을 추출하고 일반적인 행동에 위임하는 것입니다.
SthUtil
또는 이라고 함 SthLib
).의 경우 switch/case
와 if/else
조건의 동일한 세트가 항상 시험 .
유사한 알고리즘을 구현하는 모듈 . 클론 탐지기는 찾을 수 없으므로 찾기가 가장 어렵습니다.
다른 버전의 라이브러리를 다룰 때 Oded가 언급 한 유효한 요점
결국 내 질문에 대답하는 가장 좋은 문장은 stimms입니다.
OO 언어에서 사용되는 코드 재사용 방법은 객체입니다.
일반적으로 중복 코드를 단일 장소로 통합하고 원래 복제 사이트가 통합 장소를 호출하는지 확인하십시오.
예제에서 클래스 내에서 이것은 추출 된 메소드이고 클래스 세트 내에서 기본 클래스 내의 풀업 메소드입니다.
복사-붙여 넣기 코드에서 이것은 복제본을 제거하고 모든 사용자가 이제 단일 사본을 사용하도록 보장하는 것입니다 (수준에 상관없이).
다른 버전의 라이브러리를 다룰 때는 가능한 한 단일 버전으로 통합하십시오.
나는 이것이 개방형 질문이라고 생각하지만 코드의 상태에 달려 있습니다. 문맥에 따라 중복 코드를 약간 견딜 수 있음을 의미합니다. 3의 규칙이이 문제에 좋습니다.
세 가지 규칙 처음으로 무언가를 할 때, 그냥하면됩니다. 두 번째로 비슷한 일을 할 때 복제에서 승리하지만 어쨌든 중복 된 일을합니다. 세 번째로 비슷한 일을하면 리팩터링합니다.
이것은 꽤 논쟁의 여지가 있지만이 게시물 은 중복 코드를 허용하는 경우도 고려합니다.