IT박스

방법 같은 공장 이름을 지정하는 방법?

itboxs 2020. 7. 7. 07:56
반응형

방법 같은 공장 이름을 지정하는 방법?


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

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

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


임의의 생각 :

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

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

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

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

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

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


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

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

of — EnumSet에 의해 대중화되는 valueOf에 대한 간결한 대안입니다 (항목 32).

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

newInstance — getInstance와 비슷하지만 newInstance는 반환 된 각 인스턴스가 다른 모든 인스턴스와 구별되도록합니다.

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

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


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

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

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

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

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

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

패턴에 대한 "공장"이름의 은유를 계속하려면 "제조"에 유혹을받을 것입니다.하지만 너무 긴 단어입니다.


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


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

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


내가 부를거야 UriFactory.Create()

어디,

UriFactoryUri인스턴스 를 작성하는 메소드를 제공하는 클래스 유형의 이름입니다 .

그리고 Create()방법은 사양에 포함 된 변형만큼 과부하됩니다.

public static class UriFactory
{
    //Default Creator
    public static UriType Create() 
    {
    }

    //An overload for Create()
    public static UriType Create(someArgs) 
    {
    }
}

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

var foo = newFoo();

보다 더 잘 읽습니다

var foo = createFoo();

Translated to english we have foo is a new foo or foo is create foo. While I'm not a grammer expert I'm pretty sure the latter is grammatically incorrect.


I'd point out that I've seen all of the verbs but produce in use in some library or other, so I wouldn't call create being an universal convention.

Now, create does sound better to me, evokes the precise meaning of the action.

So yes, it is a matter of (literary) taste.


Personally I like instantiate and instantiateWith, but that's just because of my Unity and Objective C experiences. Naming conventions inside the Unity engine seem to revolve around the word instantiate to create an instance via a factory method, and Objective C seems to like with to indicate what the parameter/s are. This only really works well if the method is in the class that is going to be instantiated though (and in languages that allow constructor overloading, this isn't so much of a 'thing').

Just plain old Objective C's initWith is also a good'un!


Factory method doesn't dictate on method name. You can have as many methods you want in your factory, provided all of them return the object from same family.

For more details, visit the url http://xeon2k.wordpress.com

참고URL : https://stackoverflow.com/questions/3368830/how-to-name-factory-like-methods

반응형