자식

2010-05-06 4 views
1

두 곳에서 파일의 조각을 추적 내가 가진 코드와 같은 나는 두 가지 버전, 즉로 복제 할자식

void myfunc() 
{ 
    introduction(); 

    while(condition()) 
    { 
    complex(); 
    loop(); 
    interior(); 
    code(); 
    } 

    cleanup(); 
} 

:

void myfuncA() 
{ 
    introduction(); 
    minorchangeA(); 

    while(condition()) 
    { 
    complex(); 
    loop(); 
    interior(); 
    code(); 
    } 

    cleanup(); 
} 

void myfuncB() 
{ 
    introduction(); 
    minorchangeB(); 

    while(condition()) 
    { 
    complex(); 
    modifiedB(); 
    loop(); 
    interior(); 
    code(); 
    } 

    cleanup(); 
    extracleanupB(); 
} 

자식이 아니라 콘텐츠를 추적하는 주장 파일보다 크기 때문에 myfuncAmyfuncB에 공통적 인 청크가 있기 때문에 업스트림으로 병합하면 myfunc으로 변경되어 해당 변경 사항이 myfuncA과로 모두 전파되어야합니다.? 그렇다면 어떻게?

코드는 myfuncAB이 조건 A 또는 B를 테스트하여 각 지점에서 올바른 결과를 나타낼 수 있지만 가독성이나 성능을 심각하게 저하시킬 수 있습니다.

답변

2

코드를 중복하지 마십시오. 그게 DRY principle입니다.

git도 아무도 당신을 도울 수 없습니다.

게다가, 당신은 자식 (git)의 역할을 잘못 이해했습니다 : 자식 트랙 파일 내용, 청크가 아닙니다. 하나의 파일에서 그러한 덩어리가 동일하다는 것을 자식에게 알릴 방법이 없습니다.

+0

git tracks * content *, 실제로. 하지만 강조해야 할 것은 * 트랙 *입니다. 어쨌든 그것은 어떤 것도 만들어 내지 않습니다. –

+0

나는 콘텐츠를 만들지 * 묻지 않았다. :-) 나는 내가 콘텐츠를 복사하고 붙여 넣었다는 것을 인식하고 싶다고 말했다. 코드 복사 및 붙여 넣기는 권장되지 않지만 모든 규칙에는 예외가있을 수 있습니다. "진실"의 원천이 * 있기 때문에 이러한 자식 기능은 DRY 원칙을 즉시 위반하지는 않습니다. 하나의 문제는'myfuncA' 나'myfuncB'에 대한 수정이 다른 것에 수정되어야하고, 이제는 분리되어 있기 때문에 만들어지지 않습니다. 의견에 감사드립니다. – mabraham

1

실제로이 코드는 훌륭한 소스 코드 관리 시스템이지만, 거의 프로그래밍 할 필요가 없습니다.

관련 문제