2012-01-30 3 views
3

리눅스에서 개발 된 C++ 프로젝트에 대해 묻고 있습니다. 다음을 고려하십시오 :C++에서주기적인 디렉터리 종속성이 나쁜 이유는 무엇입니까?

두 개의 피어 디렉토리 dir1dir2이 있습니다. dir1classA.hclassB.h을 포함합니다. dir2classC.hclassD.h을 포함합니다. dir1/classA.hdir2/classC.h에 대해 #include입니다. dir2/classD.hdir1/classB.h에 대해 #include입니다. 결과적으로 디렉토리 dir1dir2 사이에는주기적인 종속성이 있습니다. 그러나 어떤 클래스 간에는 순환 종속성이 없습니다.

클래스 간의 주기적 종속성이 나쁜 이유를 이해합니다. 디렉토리가 주기적으로 종속되지 않아야한다는 것은 직관적 인 것처럼 보입니다. 그러나 이것이 왜 나쁜 것인지 알 수는 없습니다.

누구나 설명이 있으십니까?

+0

'classC.h'와 같은'classD.h' 또는 무엇인가 간접적 인주기가 있습니까? –

+0

.h 파일에는 간접주기가 없습니다. – KenK

답변

5

그들은 나쁘지 않습니다. 적어도 당신이 문제를 진술 한 방식은 아닙니다. 디렉토리는 파일을 구성하기위한 것이지만 프로그램 적으로 의미가 없습니다.

디렉토리가 개별 모듈을 나타내면 (예 : 각 디렉토리에 대해 생성 된 라이브러리 파일이있는 경우) 링크 오류가 발생합니다.

classAclassC에 의존하므로 첫 번째 모듈을 컴파일하려면 두 번째 모듈을 빌드해야합니다. 그러나 두 번째 모듈은 classDclassB에 의존하기 때문에 첫 번째 모듈을 먼저 빌드해야합니다.

0

마찬가지로 클래스에 대한 순환 종속성은 유지 관리 가능성재사용에 대한 문제 일 수 있습니다.

유지 관리 능력 : "모듈"(이 경우 디렉토리)이 다른 모듈에 종속 된 경우 다른 모듈이 변경 될 때마다 변경 사항이이 모듈에 영향을 줄 수 있습니다.
재사용 : 모듈을 재사용 할 때 사용하는 모듈도 재사용해야합니다.

주기적 종속성 때문에 모든 모듈이 영향을받습니다. 이는 제한된 양의 모듈로는 실제 문제가 아니지만 증가하는 양과 함께 커집니다.

+0

파일과 라이브러리에 대해 논의 할 때 이것은 나에게 의미가 있지만 필자는 디렉토리를 얻지는 않습니다. 사이클을 디렉토리 레벨에서만 수행 할 때 문제가 발생하는 경우 약간 확장하거나 예제를 제공 할 수 있습니까? 감사. – KenK

+0

파일을 디렉토리에 저장하는 것이 조직화 방법이므로 전체 디렉토리를 일종의 모듈로 재사용하는 것이 좋습니다. 주기적 종속성은 재사용 기회를 최소화합니다. 유지 보수성을 위해 종속성이 주기적이지 않은 경우, (많은) 주기적 종속성으로 인해 영향을받을 수있는 디렉토리를 예측할 수 있으며, 모든 변경 사항은 전체 시스템에 영향을 줄 수 있습니다. – stefaanv

관련 문제