코드 반복 원칙을 너무 멀리 잡고 있다고 생각합니다. 코드 반복을 피하는 요점을 생각해보십시오. 요점은 논리에 변화가있을 때 확인해야 할 코드의 양을 줄이고, 비슷한 의도의 블록을 배제하여 이해력을 높이는 것입니다.
반복을 피하기 위해 인수 분해의 단점은 공유 블록 중 하나를 변경 해야하는 경우 훨씬 더 복잡한 상속 또는 표준과 비표준 구현 간의 전환이 필요하다는 것입니다.
따라서 이러한 공통성 중 하나를 고려하여 얻은 이해 이점에 대해 다른 블록 없이도 이러한 블록 중 하나 가 변경 될 수 있는 논리의 가능성을 신중하게 평가하십시오 . 하나의 구현이 다른 구현과 분리 될 수 있다면 단순히 코드를 반복하는 것이 좋습니다.
더 복잡하게하고 문제의 도메인이 더 정의되고,이 반복되는 코드를 유지하면서, 당신은 지금 더 복잡한 반복하지만, 요인에 더 적절한 찾을 수 있습니다 또한 더 정의 섹션 밖으로.
나는 보통 반복되는 것처럼 보이는 것이 고려할 가치가있는 것으로 판명 될 때까지 한동안 텍스트 편집기의 동일성을 유지하려고한다. 나는 반복을 유지하지만 나중에 텍스트를 쉽게 일치시켜 블록의 미래를 향한 시선을 끈다.
많은 시간, 동일성 및 가능한 팩토링은 실제적이고 변덕스러운 비즈니스 규칙과 의존도가 높고 종종 임의적 인 논리로 사라지기 시작합니다. 몇 가지 일반적인 데이터베이스 구현 (ANSI_NULLS 또는 이와 유사한 것을 염두에 두는 것)의 이상을 처리하는 것과 같이 추가됩니다. 순수한 논리처럼 보이는 것을 뒤틀린 혼란 에 빠뜨리고 , 산업 국가의 혼란에 직면했을 때 합리적이고 방어 가능한 결정 논리 를 제공하려고 노력했습니다 .
사람들이 당신이 팩토링하려고하는 것을 팩토링하려고 시도하면 Do1Then2If2False Do1IfTrueDo2와 같은 쓸모없는 구문의 전체 라이브러리를 갖게 될 것 같습니다.
블록을 제거하기 위해 블록이 변경되지 않는다는 것이 더 복잡하고 명확해야합니다.
그것은의 소프트웨어 . 돌아가서 지금 같은 블록 몇 개를 편집 할 수 있습니다. 5 분이 걸립니다. 또한 시간을 허비하면서 몇 시간을 낭비하고 상속 및 스위칭 개발에 몇 시간을 낭비하지 않고 RSI 키보드를 제대로 갖추 었는지 확인할 수 있습니다.