문제

프로젝트에 우리는 하려고 합의에 도달하기 위해서는 네임스페이스를 사용합니다.우리가 결정하는 첫 번째 레벨은"제품이름"그리고 두 번째는"moduleName".

productName::moduleName

지금는 경우 모듈은 종류의 유틸리티는 모듈은 아무 문제가 없다면 추가 세 번째 네임스페이스가 있습니다.예를 들어 추가"str":productName::utilityModuleName::str-를 나눌 공간"모든 문자열"관련 물건을 갈 것입니다.

는 경우 모듈은 기본 비즈니스 모듈을 우리는 많은 기회와 거의 계약입니다.

예를 들어

class productName::mainModuleName::DomainObject

class productName::mainModuleName::DomainObjectSomethingElseViewForExample

모두가 될 수 있습에

namespace productName::mainModuleName::domainObject
class Data
class ViewForExample

왜 우리는 내면의하지 않 개인 수업과하지 않는 네임스페이스?왜 우리가 만드는 모든 방법은 정적(제외한 경우에는 이 클래스가 될 것 템플릿을 매개 변수)?

프로젝트 구성의 1Gb 의 소스 코드입니다.그래서,어떤 것은 최고의 연습을 나누어 모듈에는 네임스페이스에서는 c++?

도움이 되었습니까?

해결책

는 네임스페이스를 위한:

네임스페이스는 의미를 설정 상황에 맞지 않아도 명명 confilcts.

일반 규칙:

지정하면 너무 많은 컨텍스트 충돌하지 않도록 주의가 필요하다 더 불편보다 가치가있다.

그래서 당신이 원하는 최선의 판단을 사용하지만,여전히 따르는 이들 2 규칙:

  • 지 말라 너무 일반적이기 때 사용하는 네임스페이스
  • 지 않는 것이 너무 특정할 때 사용하는 네임스페이스

나는 것입되지 않도록 엄격한 방법에 대해 사용하는 네임스페이스 이름,그리고 단순히 사용 네임스페이스를 기반으로 관련된 그룹의 코드입니다.

왜는 네임스페이스가 너무 일반적으로 유용하지 않습니다.

문제를 함께 나누는 네임스페이스로 시작하는 제품 이름은,당신은 종종 구성 요소의 코드,또는 기본 라이브러리는 여러 제품입니다.

당신은 또한이 사용하지 않 Product2 네임스페이스 안에 Product1,그래서 명시적으로 지정하는 것은 무의미한 것입니다.당신이 포함 Product2 의 파일 내부에 Product1,다음은 이름 변환은 여전히 유용합니까?

왜는 네임스페이스는 너무 특정하지 않은 도움이 되:

이 있을 때는 네임스페이스는 너무 특정,라인 사이의 이러한 고유한 네임스페이스를 시작하라....당신이 사용하기 시작하는 네임스페이스 안에 서로 주고 받고 있습니다.이 시간에 그것을 일반화는 일반적인 코드가 함께 밑에는 동일한 네임스페이스가 있습니다.

수업으로 모든 정 vs 템플릿:

"왜 우리가 만드는 이너지 개인 수업과하지 않는 네임스페이스?왜 우리는 클래스를 만들은 모든 방법은 정적"

약간의 차이가 있습니다:

  • 네임스페이스가 될 수 있다는 묵시적으로 사용 using 키워드
  • 네임스페이스할 수 있는 별칭,클래스 형식과될 수 있습 typedef'ed
  • 네임스페이스에 추가 할 수 있습;기능을 추가할 수 있습을 그 어떤 시간에 추가하고 직접
  • 클래스에 추가할 수 없습니다하지 않고 새로운 파생 클래스
  • 네임스페이스가 있을 수 있습 앞으로 선언
  • 와 수업할 수 있는 개인 회원들과 보호되는 구성원
  • 클래스를 사용할 수 있으로 템플릿

는 방법을 정확하게 분할하는:

"프로젝트 구성의 1Gb 의 원 코드입니다.그래서 무엇이 가장 좋은 방법 분열 모듈에는 네임스페이스 c++?"

그것은 너무 주관적 정확히 말하기를 나누는 방법 당신의 코드없이 정확한 소스 코드입니다.분할에 따라 모듈도 소리는 논리지만,전체적인 제품입니다.

다른 팁

이것은 모두 주관적인,하지만 나는 주저 이상 3 은 깊은 수준입니다.그것은 단지 너무 다루기 힘드에서 일부 지점입니다.그렇지 않으면 당신의 코드 베이스가 매우 큰데,계속 그것은 매우 얕은 없습니다.

우리는 나누어 우리의 코드 서브시스템 및 네임스페이스가 있는 각 하위 시스템에 있습니다.유틸리티는 것이 자신의 네임스페이스는 경우 실제로 그들은 재사용할 수 있는 전부를 공유 할 수 있습니다.

그것은 나에게 보이려고 하는 사용 네임스페이스로 디자인 도구입니다.그들은 의도되지 않는,그들은 그들을 방지하기 위한 용도 이름을 충돌.이 없는 경우에의 충돌이,당신이 필요로 하지 않는 네임스페이스입니다.

제가 나누는 네임스페이스에 따라 사용:

나는 별도의 네임스페이스,어디에 내가 정의된 모든 내 인터페이스(순수 가상 클래스).

나는 별도의 네임스페이스,어디에 내가 정의된 나의 클래스 라이브러리(같은 db 도서관,처리브).

나는 별도의 네임스페이스,어디로 나는 나의 핵심 비즈니스(business logic)물체(purchase_order,etc.).

내 생각,그에 대한 정의에서,방법이지 않는가 처리하기 어려운 미래입니다.그래서,당신은 확인할 수 있습니다 어려움을 둘러싼 것입니다 당신의 현재 디자인이다.

그리고 당신이 생각하는 경우 그들은 잘해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top