2009-02-09 12 views
3

작년에 우리 팀의 코드베이스에서 일하면서 이름 지정 규칙이 꾸준히 진행되는 것을 보았습니다.이름 변경을 처리하는 가장 좋은 방법이 있습니까?

예를 들어, 뭔가 도움이되는 클래스라는 것을 나타내는 많은 클래스가 있습니다. 여기

내가 발견 한 것들이다 : 시간이 지남에 따라 사람들은 모든 것이 일관된 방식으로 명명하는 데 너무 대신 상대적으로 같은 일에 대한 명명 규칙을 가지고 올 것을 그냥 날 것으로 보인다

MyClassUtil 
MyClassFactory 
MyClassHelper 
MyClassManager 
MyClassService 

당신 모든 컨벤션 중 약간의 코드베이스로 마무리하십시오. 모든 새로운 것들은 최신 유행 명명 규칙에 따라 이름이 붙여지기 때문에 당시의 유행이 어떠했는지에 따라 코드의 시대를 꽤 많이 말해 줄 수 있습니다.

이 경향을 처리하는 가장 좋은 방법은 무엇입니까? 그것은 정말로 문제입니까? 이러한 명명 방식의 유행이 유행함에 따라 최신 유행을 사용해야합니까? 새 명명 규칙을 사용하여 기존 항목의 이름을 변경해야합니까? 아니면 그냥 다양성을 불가피한 것으로 받아 들여야합니까?

답변

5

그들은 유행처럼 보이지 않습니다 ...이 모든 이름은 수업의 목적을 암시하며, 그 목적은 다릅니다. 프로그래밍으로 모든 것이 이름 그대로이며 매우 조심스럽게 선택되어야합니다. 다양성은 탈출 할 필요가 없습니다. 클래스의 목적이 다양하기 때문에 이름이 다릅니다.

MyClassUtil - MyClass와 함께 작동하지 않는 일부 유틸리티. 어쩌면 MyClass는 사용하고있는 라이브러리에 속해 있지만, 종종 더 높은 수준의 기능을 사용하기 때문에 어딘가에 넣어야합니다.

MyClassFactory - 추상화 된 방식으로 MyClass의 인스턴스를 만듭니다. 이를 통해 MyClass 인스턴스가 필요한 코드를 작성할 수 있습니다. MyClassFactory에서 새 인스턴스를 가져올 수 있습니다. 그러면 앞으로 MyClass의 다른 특정 구현을 제공하기 위해 Factory가 수정 될 것입니다.어쩌면 단위 테스트에서, 공장은 단지 모의 MyClasses를 제공합니다. 즉, 팩토리를 사용하는 클래스는 팩토리를 변경하거나 변경하지 않고 테스트 할 수 있으며 테스트중인 클래스를 분리 할 수 ​​있습니다.

MyClassHelper 오케이, 아마도 더 구체적 일 수 있습니다. MyClass를 돕는 것이지만 무엇을합니다. 아마 이것은 MyClassUtil과 조금 비슷할 것입니다. 하지만 아마도 MyClassUtil은 MyClass와 함께 작동하는 일반 함수이지만 헬퍼는 MyClass의 특정 인스턴스로 초기화 된 다음 해당 인스턴스에서 작업을 수행 할 수 있습니다. 도움이 필요한 MyClass마다 새로운 도우미가 필요합니다.

MyClassManager - MyClass 인스턴스 풀을 처리하고이를 저장하거나 조정할 수 있습니다. 예 : CommunicationsManager에서 클래스는 이더넷 또는 직렬 같은 포트 또는 연결에 대한 대화를 처리하는 클래스와 패킷을 전송할 수 있도록 전달되는 통신 프로토콜을 처리하는 클래스를 처리합니다. 패킷에있는 메시지.

MyClassService -A 서비스는 우편 번호가 지정된 것처럼 그리드 참조로 변환 할 수 있습니다. 일반적으로 서비스는 많은 특정 사항을 해결할 수 있습니다. 우편 번호 예제에서이 클래스는 변환을 수행하기 위해 다른 웹 사이트와 대화 할 수있는 구현을 가질 수 있습니다.

+0

우수 답변. 나는 그들이 완전히 유행이라고 확신하지는 않는다는 것을 인정해야한다. 그러나 나는 나의 마음의 뒤에서 잔소리가 나는 의심을 품었다. .. 그러므로 질문. 각 이름이 다른 구체적인 의미를 가지고 있다는 것을 알고있는 한, 나는 그 이름으로 일할 수 있고, 내가 더 잘 만드는 것들을 명명 할 수 있습니다. – mezoid

+0

이름 지정이 작동하는지 여부에 관계없이 적어도 누군가는 공통 클래스에 공통 코드를 던지고 있습니다. –

4

위의 클래스 이름은 모두 객체 지향 원칙에서 눈에 띄는 출발을 의미합니다. "MyClassUtil"또는 "MyClassService"가 무엇을하는지 알 수있는 방법이 없습니다. 그것은 무엇이든 수 있습니다. 클래스 명명은 구체적이어야하며 클래스의 실제 기능을 명확하게 전달해야합니다. 이들 중 어느 것도하지 마십시오. 이 경향을 처리하는 가장 좋은 방법은 객체 지향 프로그래밍 기술을 익히고 그에 따라 클래스 이름을 지정하는 것입니다.

이제는 이러한 사례가 응용 프로그램 아키텍처 내에서 이러한 클래스가 나타내는 함수를 지적하고 "MyClass"의 사용은 런타임에서보다 명확한 무언가를위한 자리 표시 자일 수 있습니다. 이것들을 네이밍 유행으로 보는 것이 아니라, 클래스 자체의 기능에 대한 설명적인 지표로, 응용 프로그램의 기본 아키텍처에 대한 느슨한 힌트를 제공합니다.

+0

어떤 상황에서 다른 명명 규칙이 적용될 수 있습니다. 관리자와 도우 대 관리자는 언제 사용해야합니까? – mezoid

+0

다시 말하지만,이 모든 것은 응용 프로그램이 프로그래밍 된 아키텍처에 따라 다릅니다. 도메인 비즈니스 오브젝트에 대한 아키텍처 지원을 비즈니스 오브젝트 자체와 구별 할 필요가있을 때, 접 L 사가 허용 가능합니다. –

0

은 정말

공장은 디자인 패턴과 클래스가 정말 공장의 경우 그것은 완벽하게 적절한 이름의 ... 공장 또는 서비스가 특정 유행에 맞게 표시되지 않습니다.

클래스가 Windows 서비스 인 경우 서비스 호출에 문제가 있습니까?

정말로 이름 바꾸기 리팩터를 수행하는 것이 너무 비용이 많이 드는 경우가 아니면 문제가되지 않습니다.

+0

하지만 내 코드베이스에는 서비스로 나열된 것조차도 "Windows 서비스"가 아닙니다 ... 종종 MyClassRetrievalService, MyClassGroupingService, MyClassSomethingElseService 등과 같은 것이 있습니다 ... – mezoid

4

널리 퍼진 경우 팀은 OO 설계를 공부하는 데 시간을 할애해야합니다. 즉, 잘 알려진 OO 프레임 워크, 디자인 패턴에 대한 책 또는 Evans "Domain Driven Design"과 같은 서적을 읽어야합니다.

"Util"및 "Manager"는 종종 "코드 냄새"라는 잘못된 디자인의 증상입니다. 특별한 상황 (Rails 앱)이 아닌 곳에서는 "도우미"가 잘 정비되어 있습니다.

"공장"및 "서비스"는 기술적 인 의미가 정확하므로 코드를 검사하여 해당 디자인 패턴과 일치하는지 확인할 수 있습니다.

일반적인 해결 방법은 팀과 함께 앉아 이러한 명명 체계에서 기대할 수있는 이점, 이해할 수있는 것과 그렇지 않은 것, 그리고 앞으로 몇 달 동안 리팩터링을 적용하는 방법에 대해 명시 적으로 토론하는 것입니다. 기술은 코드 냄새라고 결정한 이름을 단계적으로 제거합니다.

이름이 중요합니다. 그것은 가볍게 받아 들여서는 안되며 주관적인 문제도 아닙니다. 사실, 주어진 명명 문제에 대해 하나 이상의 정답이 종종 있습니다. 그러나 드물게 많은 대답이 있습니다. 은 이전 선택 사항 인과 일치합니다.

+0

굉장한 대답 ... 그것은 나를 더 잘 이해하는 것을 도왔습니다. 지금까지이 대답은 제가 지금까지 가장 많이 배웠습니다. 감사! – mezoid

+0

관심이 있으신 분은 존경받는 조직 프레임 워크를 추천 해 주실 수 있습니까? 내 마음 속에서 나는 정기적으로 사용하는 오픈 소스 도구를 생각하고있다. NHibernate 나 Mono와 같다. 많은 사람들이 이것을 사용하므로 존경받는 표식입니까 아니면 훌륭한 OO 디자인 모델입니까? – mezoid

+0

OO는 프레임 워크가 아니라 디자인에 관한 것입니다. 도구가 많은 사람들에 의해 사용되는 경우 많은 사람들이 용도에 유용하다는 것을 알았지 만 도구가 좋은 디자인을 조장하는지 여부는 알 수 없습니다. (Well, dependency injection framework은 좋은 디자인을 촉진합니다. 예를 들어 Guice) –

2

더 나은 이름으로 이름을 바꾸고 코드를 리팩터링하여 각 클래스에 명확한 responsibility이 있도록하는 것이 좋습니다. 사용할 이름의 종류를 알고 싶다면 Meaningful Names에 대한 Tim Ottinger의 기사를 읽으십시오.

클래스가 한 가지 일을하는 경우 일반적으로 설명이 포함 된 이름을 지정하는 것이 일반적입니다. "매니저"와 같은 단어는 모호하며 클래스가하는 일을 설명 할 수있는 단순한 이름이 없기 때문에 클래스가 많은 관련이없는 일을 담당해야 함을 나타낼 수 있습니다. 수업의 이름을보고 수업이하는 일을 알면 수업의 이름이 좋습니다.

+0

나는 급한 프로그래머를위한 아주 짧은 버전을 가지고 있는데, 색인 카드를 위해 충분히 작다. http://agileinaflash.blogspot.com/2009/02/meaningful-names.html –

0

정적 분석 도구를 사용하여 스타일 및 일관성 규칙 집합을 적용하는 데 도움이되는 이유는 무엇입니까?

NET world Microsoft는 StyleCop

0

이라는 도구를 제공합니다. "MyClass"는 "PersonnelRecordUtil"또는 "GraphNodeFactory"와 같은 이름을 실제로 볼 수 있도록 실제 클래스 이름을 나타냅니다. MyClassFactory는 클래스의 실제 실제 이름이 아닙니다.