[coding-style] 방법 같은 공장 이름을 지정하는 방법?

나는 대부분의 공장과 같은 방법이로 시작한다고 생각합니다 create. 그러나 왜 ” 만들기 ” 라고 불리는가 ? ” 만들기 “, ” 생성하다 “, ” 빌드 “, ” 생성하다 “또는 다른 무엇인가? 맛만 문제입니까? 컨벤션? 아니면 “만들기”에 특별한 의미가 있습니까?

createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)

일반적으로 어떤 것을 선택 하시겠습니까?



답변

임의의 생각 :

  • ‘만들기’는 대부분의 다른 단어보다 기능에 더 적합합니다. 내 머리 꼭대기에서 생각할 수있는 다음으로 가장 좋은 단어는 ‘Construct’입니다. 과거에는 ‘Alloc'(할당)이 C와 같은 언어로 된 객체보다 데이터 블록에 더 중점을 둔 유사한 상황에서 사용되었을 수 있습니다.

  • ‘만들기’는 명확하고 직관적 인 의미를 가진 짧고 간단한 단어입니다. 대부분의 경우 사람들은 아마도 무언가를 만들려고 할 때 가장 먼저 떠오르는 단어로 선택합니다. 일반적인 명명 규칙이며 “개체 생성”은 개체 생성 프로세스를 설명하는 일반적인 방법입니다.

  • ‘구문’은 가깝지만 일반적으로 객체를 생성하는 과정에서 특정 단계를 설명하는 데 사용됩니다 (할당 / 신규, 구성, 초기화 …).

  • ‘빌드’와 ‘만들기’는 코드 컴파일과 관련된 프로세스의 일반적인 용어이므로 프로그래머에게 다른 의미를 지니므로 많은 단계와 디스크 활동이 많은 프로세스를 의미합니다. 그러나 팩토리 “빌딩”이란 아이디어는 합리적인 아이디어입니다. 특히 복잡한 데이터 구조가 구축되거나 여러 별도의 정보가 어떤 방식으로 결합 된 경우에 특히 그렇습니다.

  • ‘생성’은 해시 코드 또는 난수 생성과 같은 입력에서 값을 생성하는 데 사용되는 계산을 의미합니다.

  • ‘생성’, ‘생성’, ‘구성’은 ‘생성’보다 타이핑 / 읽기가 길다. 역사적으로 프로그래머들은 타이핑 / 읽기를 줄이기 위해 짧은 이름을 선호했습니다.


답변

“유효한 Java”의 Joshua Bloch 는 다음과 같은 명명 규칙을 제안합니다.

valueOf — 느슨하게 말하면 매개 변수와 같은 값을 가진 인스턴스를 반환합니다. 이러한 정적 팩토리는 효과적으로 형식 변환 방법입니다.

of — 간결한 대안 valueOf으로 EnumSet(Item 32)에 의해 대중화되었습니다 .

getInstance — 매개 변수로 설명되어 있지만 같은 값을 가질 수없는 인스턴스를 반환합니다. 싱글 톤의 경우
getInstance매개 변수를 사용하지 않고 단독 인스턴스를 리턴합니다.

newInstance — Like getInstance를 제외하고 newInstance반환 된 각 인스턴스가 다른 모든 인스턴스와 구별되도록합니다.

get Type — Like getInstance이지만 팩토리 메소드가 다른 클래스에있을 때 사용됩니다. Type 은 팩토리 메소드가 리턴 한 오브젝트의 유형을 나타냅니다.

new Type — Like newInstance이지만 팩토리 메소드가 다른 클래스에있을 때 사용됩니다. Type 은 팩토리 메소드가 리턴 한 오브젝트의 유형을 나타냅니다.


답변

다른 답변에서 볼 수없는 몇 가지 사항을 추가하고 싶었습니다.

  1. 전통적으로 ‘공장’은 ‘객체 생성’을 의미하지만, 나는 그것을 ‘예상 한대로 행동하는 대상을 돌려주는 것’으로 더 넓게 생각하고 싶습니다. 나는 그것이 새로운 물체 인지 항상 알아야 할 필요는 없으며 , 실제로는 상관하지 않을 수도 있습니다. 따라서 적절한 경우에는 지금 구현하는 방식이더라도 ‘만들기 …’이름을 피할 수 있습니다.

  2. 구아바는 공장 명명 아이디어의 좋은 저장소입니다. 멋진 DSL 스타일을 대중화하고 있습니다. 예 :

    Lists.newArrayListWithCapacity(100);
    ImmutableList.of("Hello", "World");
    

답변

“만들기”와 “만들기”는 짧고, 합리적으로 연상 적이며, 내가 생각할 수있는 명명의 다른 패턴과 관련이 없습니다. 나는 또한 꽤 자주 보았고 그것들이 “사실 표준”일지도 모른다고 의심했다. 하나를 선택하고 적어도 프로젝트 내에서 일관되게 사용합니다. (내 자신의 현재 프로젝트를 보면 “make”를 사용하는 것 같습니다. 일관성이 있기를 바랍니다 …)

빌더 패턴에 더 잘 맞기 때문에 “빌드”를 피하고 생산자 / 소비자를 불러 일으키기 때문에 “생성”을 피하십시오.

패턴에 대한 “공장”이름의 은유를 계속 유지하기 위해 “제조”에 유혹을 받았지만 너무 긴 단어입니다.


답변

나는 그것이 ” 객체 를 만드는 것”에서 비롯된 것이라고 생각합니다 . 그러나 영어에서“만들기”라는 단어는“자연적으로 진화하지 않거나 평범한 과정에 의해 만들어지지 않은 독특한 것”,“자신의 생각 또는 예술 작품이나 발명품으로서의 상상력.” 따라서“만들기”가 올바른 단어 가 아닌 것 같습니다 . 반면에“만드는 것”은“재료를 형성하거나 바꾸거나 부품을 결합하는 등의 방법으로 존재하게하는 것”을 의미합니다. 예를 들어, 당신이하지 않는 만들 드레스를, 당신이 만들 드레스 (객체). 제 생각에는“만들다”는 의미에서“만들다”; 존재하거나 발생하는 원인; 가져오다”는 것은 공장 방법에 훨씬 더 좋은 단어입니다.


답변

나는 새로운 것을 좋아한다. 나에게

var foo = newFoo();

보다 더 잘 읽습니다

var foo = createFoo();

영어로 번역하면 foo가 새로운 foo이거나 foo가 create foo입니다. 나는 문법 전문가가 아니지만 후자는 문법적으로 부정확하다고 확신합니다.


답변

부분적으로 관례, 부분적으로 의미론.

팩토리 메소드 (전통적으로 서명 됨 create)는 적절한 생성자를 호출해야합니다. 내가 보았을 때 buildURI, 계산이나 부품 조립이 포함되었다고 가정합니다 (공장이 관련된 것으로 생각하지 않습니다). 내가봤을 때 가장 먼저 생각한 것은 generateURI새로운 개인화 된 다운로드 링크처럼 무작위로 무언가를 만드는 것입니다. 그것들이 모두 같은 것은 아니며, 다른 단어들이 다른 의미를 불러 일으킨다. 그러나 그들 대부분은 전통적인 것이 아닙니다.