[design-patterns] 이름 지정 클래스 - 모든 것을 "<WhatEver> Manager"라고 부르는 것을 피하는 방법?



5 Answers

source-code-wordle.de 에서 살펴볼 수 있습니다. .NET Framework 및 다른 라이브러리의 클래스 이름에서 가장 자주 사용되는 접미사를 분석했습니다.

상위 20 위는 다음과 같습니다.

  • 속성
  • 유형
  • 돕는 사람
  • 수집
  • 변환기
  • 매니저
  • 정보
  • 공급자
  • 예외
  • 서비스
  • 요소
  • 매니저
  • 마디
  • 선택권
  • 공장
  • 문맥
  • 디자이너
  • 베이스
  • 편집자
Question

오래 전에 나는 네이밍 객체의 "올바른"트랙에 나를 올려 놓은 기사 (나는 블로그 엔트리를 믿는다)를 읽었습니다 : 당신의 프로그램에서 이름 짓기에 관해서는 매우 신중해야합니다.

예를 들어 내 응용 프로그램이 (일반 비즈니스 응용 프로그램처럼) 사용자, 회사 및 주소를 처리하는 경우 User , CompanyAddress 도메인 클래스가 있고 아마도 UserManager , CompanyManagerAddressManager 어딘가에 해당 핸들이 팝업됩니다 그것들.

UserManager , CompanyManagerAddressManager UserManager 일을 알려줄 수 있습니까? 아니요, Manager는 도메인 객체로 수행 할 수있는 모든 작업에 매우 일반적인 용어이기 때문에 아닙니다.

내가 읽은 기사는 매우 구체적인 이름을 사용하여 추천했습니다. 그것이 C ++ 응용 프로그램이고 UserManager 의 작업이 힙에서 사용자를 할당하고 해제하는 경우 사용자를 관리하지 않지만 출생과 사망을 보호합니다. 음, 아마 우리는 이것을 UserShepherd 라고 부를 수있을 것입니다.

또는 UserManager 의 작업은 각 User 객체의 데이터를 검사하고 데이터에 암호로 서명하는 것입니다. 그러면 UserRecordsClerkUserRecordsClerk .

이제이 아이디어가 나와 함께 붙어서 그것을 적용하려고합니다. 그리고이 간단한 아이디어를 놀랍도록 열심히 찾으십시오.

클래스가하는 일을 설명 할 수 있으며 (필자가 빠르고 코딩에 빠지지 않는 한) 내가 작성하는 클래스는 정확히 가지를 수행합니다. 그 설명에서 이름에 이르기까지 놓친 것은 일종의 이름 목록인데, 그 개념을 이름에 매핑하는 어휘입니다.

궁극적으로 나는 내 마음 속에 패턴 카탈로그와 같은 것을 갖고 싶다. (종종 디자인 패턴은 객체 이름을 쉽게 제공한다. 예를 들어 공장 )

  • Factory - 다른 객체를 만듭니다 (디자인 패턴에서 가져온 이름).
  • 양치기 (Shepherd) - 양치기는 개체의 수명, 생성 및 종료를 처리합니다.
  • Synchronizer - 둘 이상의 개체 (또는 개체 계층 구조)간에 데이터를 복사합니다.
  • Nanny - 객체가 생성 후 "사용 가능"상태에 도달하도록 돕습니다. 예를 들어 다른 객체에 연결

  • 등등.

그래서, 어떻게 그 문제를 처리합니까? 고정 된 어휘를 사용하고 있습니까? 즉석에서 새로운 이름을 발명 했습니까? 또는 중요하지 않거나 잘못되었지만 이름을 지정하는 것을 고려합니까?

추신 : 나는 또한 문제를 논의하는 기사와 블로그에 대한 링크에 관심이있다. 우선, 저에게 생각해 봤던 원래 기사가 있습니다 : '관리자'가없는 Java 클래스의 이름 지정하기

업데이트 : 요약 답변

그 동안 내가이 질문에서 배운 것을 요약 해 보았습니다.

  • 새로운 은유를 만들지 않도록 노력하십시오 (Nanny)
  • 다른 프레임 워크가하는 일을 살펴보십시오.

이 주제에 관한 더 많은 기사 / 책 :

그리고 응답에서 수집 한 이름 접두사 / 접미사의 현재 목록 (주관적으로!) :

  • 조정자
  • 작성자
  • 작가
  • 리더
  • 매니저
  • 컨테이너
  • 실험 계획안
  • 목표
  • 변환기
  • 제어 장치
  • 전망
  • 공장
  • 실재
  • 버킷

그리고 도로를위한 좋은 팁 :

명명 마비를하지 마십시오. 예, 이름은 매우 중요하지만 엄청난 시간을 낭비 할만큼 중요하지 않습니다. 10 분 안에 좋은 이름을 생각할 수 없다면 계속 나아가 라.




GOF 서적에 정의 된대로 패턴을 사용하여 객체를 명명하고 객체 이름을 지정하면 클래스 이름 지정, 구성 및 의사 전달에 많은 도움이됩니다. 대부분의 사람들은이 명명법 (또는 적어도 그것의 중요한 부분)을 이해할 것입니다.




실제 세계를 정확하게 모델링 한 경우 xxxFactory , xxxManager 또는 xxxRepository 클래스없이 수행 할 수 있습니다.

Universe.Instance.Galaxies["Milky Way"].SolarSystems["Sol"]
        .Planets["Earth"].Inhabitants.OfType<Human>().WorkingFor["Initech, USA"]
        .OfType<User>().CreateNew("John Doe");

;-)




여기서 중요한 것은 코드의 가시성 범위 내에서 일관성을 유지하는 것입니다. 즉, 코드를보고 / 조작해야하는 모든 사람들이 자신의 명명 규칙을 이해하면 괜찮을 것이라고 생각합니다. 'CompanyThingamabob'및 'UserDoohickey'. 첫 번째 중지는 회사에서 일하는 경우 이름 지정을위한 회사 협약이 있는지 확인하는 것입니다. 회사에 근무하지 않거나 회사에서 일하지 않는 경우 자신에게 맞는 용어를 사용하여 자신 만의 회사를 만들고, 적어도 코드를 자연스럽게 코딩하는 신뢰할 수있는 동료 / 친구 몇 명에게 전달하고 의미가있는 의견을 통합하십시오.

다른 사람의 대회를 널리 받아 들였을 때조차도 페이지에서 뛰어 내리지 않으면 내 책에서 약간의 실수가됩니다. 무엇보다도 먼저 다른 문서를 참조하지 않고 코드를 이해해야하지만 동시에 동일한 업계의 동일한 분야에있는 다른 사람에게는 이해할 수 없을 정도로 충분히 포괄적 일 필요가 있습니다.







C # 관련하여 명명 규칙 논리에 대한 많은 정보를 얻기 위해 "프레임 워크 디자인 지침 : 재사용 가능한 .NET 라이브러리의 규칙, 관용구 및 패턴" 을 발견했습니다.

더 구체적인 단어를 찾는 한, 나는 종종 시소러스를 사용하고 관련 단어를 뛰어 넘어서 좋은 단어를 찾으려고 노력합니다. 내가 개발을 진행하면서 나는 더 나은 이름을 SuchAndSuchManager 때로는 SuchAndSuchManager 가 실제로 여러 클래스로 SuchAndSuchManager 져야한다는 사실을 SuchAndSuchManager 그런 다음 사용되지 않는 클래스의 이름이 비 - 발행물.




Related