문제

저는 종종 상황에서 나는 개념으로 표현하는 인터페이스 또는 클래스가 있는 시리즈의 서브 클래스/하위를 확장니다.

예를 들어:일반적인"DoiGraphNode" 는"DoiGraphNode"나타내는 자원 는"DoiGraphNode"나타내는 Java 자원 는"DoiGraphNode"으로 연결된 경로,etc., etc.

나는 생각할 수 있는 세 개의 이름 지정 규칙을 감사하겠는 방법에 대한 의견을 선택합니다.


옵션 1:항상 이름으로 시작하의 개념입니다.

따라서:DoiGraphNode,DoiGraphNodeResource,DoiGraphNodeJavaResource,DoiGraphNodeWithPath,etc.

Pro:그것은 매우 분명 내가 무엇을 다루고,그것은 모든 옵션을 참조하십시오 나는

Con:지 않는 아주 자연?모두는 같습니까?


옵션 2:을 넣어 특별한 재료 처음이다.

따라서:DoiGraphNode,ResourceDoiGraphNode,JavaResourceDoiGraphNode,PathBaseDoiGraphNode, etc., etc.

Pro:그것은 매우 명확한 경우에는 코드

Con:그것을 찾기 어려울 수 있습,특히지 않는 경우 이름을 기억하고,부족의 일관성 visual


옵션 3:을 넣어 특별한 재료의 일부를 제거 중복되는 텍스트

따라서:DoiGraphNode,ResourceNode,JavaResourceNode,GraphNodeWithPath

Pro:하지 않는 것이 훨씬 읽고 쓰기가 Con:처럼 보이는 크롬*p,매우 일관성,충돌할 수 있습과 다른 이름

도움이 되었습니까?

해결책

그들이 무엇인지에 대해 이름을 지정하십시오.

그것들을 지명하는 것이 어렵거나 모호하다면, 종종 수업이 너무 많은 일을하고 있다는 신호입니다 (단일 책임 원칙).

명명 충돌을 피하려면 네임 스페이스를 적절하게 선택하십시오.

개인적으로, 나는 3을 사용합니다

다른 팁

당신이 좋아하는 것을 사용하십시오. 그것은 주관적인 것입니다. 중요한 것은 각 클래스가 무엇을 나타내는 지 명확하게하는 것이며, 이름은 상속 관계가 의미가 있어야합니다. 그래도 나는 이름의 관계를 인코딩하는 것이 중요하다고 생각하지 않습니다. 그것이 문서화의 것입니다 (그리고 당신의 이름이 물체에 적합한 경우 사람들은 무엇에서 상속되는지에 대해 좋은 추측을 할 수 있어야합니다).

가치가있는 것에 대해, 나는 보통 옵션 3을 사용하고, 다른 사람들의 코드 옵션 2를 보는 경험에서 옵션 1보다 더 널리 퍼질 것입니다.

당신이 찾을 수 있는 몇 가지 지침에 코딩 표준 문서,예를 들어 있 IDesign 문서는 C# .

개인적으로,내가 선호하는 옵션 2.이것은 일반적으로는 방식.NET Framework 이름을 해당 개체입니다.예를 들어 봐 속성 클래스입니다.그들은 모두에서 끝나 특성(TestMethodAttribute).동일하십시오:OnClickEventHandler 권장름 이벤트에 대한 핸들러를 처리하는 이벤트를 클릭합니다.

나는 일반적으로 수행하려고 이를 디자인 내 자신의 코드와 인터페이스를 제공합니다.따라서 IUnitWriter 생산 StringUnitWriter 및 DataTableUnitWriter.이 방법으로 난 항상 무엇을 알고 그들의 기본 클래스고 그것을 읽는 자연스럽게.자기 문서화하는 코드는 최종 목표는 모든 민첩한 개발자 그래서 그것을 작동하는지 확인하다!

나는 일반적으로 옵션 1과 비슷합니다. 특히 수업이 다형적으로 사용될 때. 내 추론은 가장 중요한 정보가 먼저 나열되어 있다는 것입니다. (즉, 서브 클래스는 기본적으로 조상이 (보통) 확장자가 '추가 된 것'이라는 사실). 클래스 이름 목록을 정렬 할 때 관련 클래스가 함께 나열되기 때문에이 옵션도 좋아합니다. 즉, 나는 일반적으로 번역 단위 (파일 이름)의 이름과 동일한 클래스 이름과 동일하므로 관련 클래스 파일이 자연스럽게 함께 나열됩니다. 마찬가지로 이것은 증분 검색에 유용합니다.

나는 프로그래밍 경력 초기에 옵션 2를 사용하는 경향이 있었지만, 당신이 말하자면 '일관성이없고'매우 직교처럼 보이지 않기 때문에 지금 피합니다.

하위 클래스가 상당한 확장 또는 사양을 제공하거나 이름이 다소 길어질 때 종종 옵션 3을 사용합니다. 예를 들어, 내 파일 시스템 이름 클래스는 문자열에서 파생되지만 문자열 클래스를 크게 확장하고 사용/의미가 크게 다릅니다.

String에서 파생 된 directory_entry_name은 광범위한 기능을 추가합니다. directory_entry_name에서 파생 된 file_name에는 다소 전문화 된 기능이 있습니다. directory_entry_name에서 파생 된 directory_name에는 다소 전문화 된 기능이 있습니다.

또한 옵션 1과 함께 보통 인터페이스 클래스에 자격이없는 이름을 사용합니다. 예를 들어 클래스 인터렌스 체인이있을 수 있습니다.

  • 텍스트 (인터페이스)
  • text_abstract (초록 (기본) 일반화 클래스)
  • text_ascii (ASCII 코딩에 대한 콘크리트 클래스)
  • Text_unicode (유니 코드 코딩에 대한 콘크리트 클래스)

오히려 인터페이스와 추상 기본 클래스가 정렬 된 목록에 자동으로 나타납니다.

옵션 3은 상속 개념에서 논리적으로 더 논리적으로 따릅니다. 인터페이스 나 클래스를 전문으로하기 때문에 이름은 더 이상 기본 구현을 사용하지 않는다는 것을 보여 주어야합니다 (존재하는 경우).

클래스가 상속하는 것을 볼 수있는 수많은 도구가 있으므로, 클래스의 실제 기능을 나타내는 간결한 이름은 너무 많은 유형 정보를 이름에 포장하는 것보다 더 멀리 갈 것입니다.

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