2009-03-23 3 views
14

마지막으로 프로젝트에서 클래스 이름에 디자인 패턴 이름을 포함하는 것이 매우 편리하다는 것을 알았습니다.클래스 이름에 디자인 패턴 이름을 포함 할 때?

  • ContextLazyFactory
  • ThirdPartyMediator
  • MyProjectCliFacade
  • BinaryGate

그것은 읽기 프로젝트가 쉽게

  • RunOnceMediator 예를 들면 다음과 같습니다. 추가 혜택은 "RunOnceManager", "ContextDelayedConstruction", "ThirdPartyInterface"등과 같이 작성자에게만 의미있는 이름을 사용할 수 없다는 것입니다. 반면에 STL에서는 vector_container와 같은 클래스를보고 싶지 않습니다. 당신은 어떻게 생각하십니까?

    이 주제에 대한 나의 현재 견해는 다음과 같습니다. 클래스 계층 구조에서 중요한 노드 인 클래스는 이름에 디자인 패턴을 가져야하며, 계층 구조를 강조하고 프로젝트를 훨씬 쉽게 읽을 수 있도록해야합니다.

  • 답변

    20

    이 많은 경우 나 자연 보인다

    • 디자인 패턴은 그들이
    • 클래스는 그들이

    을 무엇을 설명하는 이름을 지정하는 일을 설명하는 이름을 지정하는 경우, 간단한 방법의 클래스의 목적을 설명하는 것은 디자인 패턴 용어로, 왜 사용하지 않습니까?

    반면에 디자인 패턴이 대부분 이면 우연히 인 경우 제외하십시오. 예를 들어, 클래스는 싱글 톤일 수도 있지만, 그게 인생의 주요 목적이 아니기 때문에 이름에 "싱글 톤"이 보이지 않을 것이라고 생각합니다. 이것을 다른 객체를위한 팩토리가되는 것을 주된 목적으로하는 팩토리와 비교해보십시오. "FooFactory"가 완벽합니다.

    +1

    Downvoters : downvoters : downvote 때 대답에 동의하지 않는 이유를 설명 해주십시오. –

    +0

    +1 완전히 동의합니다. – eglasius

    +0

    @Jon이 경우 나는 downvoters가 이름에 넣거나 전혀 넣지 않는다고 생각하는 것이 공평하다고 생각한다. 어느 경우 든 나는 그 정보로 많은 것을 할 수 있다고 생각하지 않는다. 그것에 대한 오랜 토론). – eglasius

    0

    나는 동의합니다. 추가 할 수있는 유일한 방법은 클래스 이름 내의 패턴 이름이 실제 사용 된 패턴을 사용하는지 확인하는 것입니다.

    예전에 XxxxFactory (또는 이와 비슷한 것)라는 클래스를 보았지만 팩토리 패턴과 전혀 닮지 않았습니다!

    0

    클래스 이름에 디자인 패턴 이름을 사용하여 다른 사람들이 쉽게 읽을 수 있고 이해하기 쉽도록했습니다.

    벡터는 이미 컬렉션을 의미하므로 _collection이 필요하지 않습니다. Btw 컨테이너는 디자인 패턴이 아닙니다.

    0

    결과 이름이 명확하면 계속해서 사용하십시오.

    그러나 결과 이름이 어둡거나 모호한 경우가 있습니다. 이 경우 가장 적절한 이름을 사용하십시오.

    1

    이름에 디자인 패턴을 사용하면 위대한 아이디어라고 생각합니다.

    GameLevelAbstract 
    InGameArea 
    MainMenu 
    

    두 번째 두 개의 클래스 (InGameArea 및 MAINMENU) 서브 클래스 GameLevelAbstract를하고 순수 가상 메소드의 구현 : 내 게임 중 하나의 예를 들어 내가있다. 내 소스보기에서 해당 클래스가 추상적이며 즉시 또는 내가 무엇을 찾고 있는지 알 수 있습니다. 나는 그것이 그래픽을 다루는 것을 제외하고, 상기 한 바와 같이

    GraphicsFacade 
    OpenGLGraphics 
    DirectXGraphics 
    

    정확히 같은 설정 :

    또 다른 예는 내 그래픽 외관입니다.

    나는 클래스를 찾고있을 때 유용하고 유익한 이름의 디자인 패턴을 사용합니다. 나는 Flyweight, Factory 또는 Facade가 그러한 패턴을 구현하는 클래스의 이름에 잘 맞다고 생각하는 디자인 이름의 예제이지만 Singleton과 같은 이름으로는 사용하지 않아야한다고 믿는다.

    좋은 클래스 이름을 사용하면 프로그래머가 클래스를 한눈에 파악하는 데 도움이되는 것은 좋은 것입니다.

    나는 뭔가가 데이터 구조인지 알고리즘인지는 대부분의 경우에 좋은 점이라고 생각하지 않습니다. "LinkedListDataStructure"또는 "BubbleSortAlgorithm"은 프로그래머가 클래스를 이해하는 데 아무 것도 추가하지 않습니다. "LinkedList"는 함수에서 분명합니다.

    +0

    +1 추상 클래스의 클래스 이름에 "abstract"를 두는 것도 좋습니다. 표준 .NET 명명 규칙은 "MyClassBase"이지만 "AbstractMyClass"를 선호합니다 – MattDavey

    +0

    * "LinkedListDataStructure"또는 "BubbleSortAlgorithm"은 프로그래머의 이해에 아무 것도 추가하지 않습니다. * 이것 역시 완전히 동의합니다. 클래스의 이름은 인터페이스의 일부이며 인터페이스는 다음과 같은 구현 세부 사항을 광고해서는 안됩니다. 부끄러운 줄 알았습니다 +2 당신;) – MattDavey

    +1

    기본 클래스 이름에'Abstract'가 맘에 들지 않습니다. 'X'는'Y'에서 파생 된 것을 보았습니다.'X'는'Y'의 _type_입니다 (예 :'Dog'는'AbstractAnimal'이 아닌'Animal'의 한 종류입니다). 'AbstractY' 타입의 변수가 추상 참조이지만, 그것은 추상적 인 것을 가리키고 있지 않습니다. –

    0

    적어도 하나의 단점이 있습니다. 클래스가 어떤 이유로 리팩터링 후 패턴을 사용하지 않는 경우 이름을 바꾸거나 잘못된 이름의 클래스를 사용해야합니다.

    +1

    동의하지만 디자인 패턴은 객체의 동작을 나타냅니다. 리팩터링 한 후 객체가 원격으로 동일한 방식으로 동작하지 않는 경우, 대신 새 클래스 여야합니다. – MattDavey

    0

    디자인 패턴 이름을 클래스 이름으로 추가하는 것이 좋습니다. 따라서 코드를 더 쉽게 이해할 수 있습니다. 클래스 이름은 의미가 있어야하며 클래스의 기능을 반영해야합니다. 클래스 이름에 패턴 이름을 추가하면 클래스를 디자인하는 데 사용 된 기술을 반영하기 때문에 가독성이 향상됩니다. 나는이 유형의 클래스 이름을 선호한다.