context가 다른 상황에서 도메인 서비스와 모델에 네이밍에 이름이 겹치는 경우 어떻게 하시나요?

2013-03-02 21:48

예를 들면 아래와 같은 상황입니다.

net.slipp.service.bulletinboard.BoardFinder net.slipp.service.qnaboard.BoardFinder

클래스명만으로 패키지 내에서 역할을 표현하는데 충분합니다. 하지만, 다른 패키지를 고려하면 이름이 겹치는 경우가 있습니다. 물론 패키명으로 구분이 가능한 상황입니다. 이 경우 이클립스에서 찾기를 하면 클래스가 2개가 나오겠죠. 많은 분들이 prefix를 두고 사용하시는데 클래스 이름도 길어지고 다른 패키지를 고려하는 것 자체가 객체지향을 깨뜨리는 사고 일수도 있습니다.

여러분들은 어떻게 네이밍을 하시나요?

6개의 의견 from SLiPP

2013-03-03 01:22

예전에는 나름 신경써서 뭔가를 더 붙이고 했지만, 지금이야 워낙 툴들이 좋아져서 굳이 prefix나 suffix등은 안붙이는게 낫지 않나 싶습니다.

이클립스라면 ctrl+shift+t(h) 누른 후, "*.q.Board" 또는 "*.b.*Finder" 정도만 쳐도 리스트에 나오니까요.

또는 type filter에 등록해 두고 쓴다던지.

패키지명은 고민해볼 만한.. 언제나 네이밍이 힘들다는.ㅡㅡ;

2013-03-03 09:45

제 생각은 위 BordFinder 가 여러(2개 이상)의 패키지에서 나타난다면 중복으로 간주하고 인터페이스로 BorderFinder 를 빼고 이를 상속한 인스턴스에 대해서는 Prefix 를 붙혀줍니다. 그런데 계속적으로 BorderFinder 가 늘어 난다면 BorderFinderFactory 를 고려해볼것 같습니다.

또 패키지는 공통되는 bord로 repackage 하겠습니다.

net.slipp.service.bord.BuiltinBoardFinder net.slipp.service.bord.QNABoardFinder net.slipp.service.bord.BoradFinder net.slipp.service.bord.BoradFinderFactory

2013-03-03 12:08

@양완수 네 아주 좋은 선택입니다. 예제는 문제를 만들기 위해서 일부러 상황을 만든 것이고 기본적인 고민은 중복의 도메인이 없는가를 체크하는 것이 맞습니다. 그럼에도 불구하고 겹치는 이름이 나올 때 어떤 전략을 취할 것인가에 대한 것이 질문의 요지입니다.

또한 factory를 만드는 것은 인터페이스가 같다는 가정인데 그렇지 경우가 더 많을 수도 있습니다. 아래정도면 대부분 충분합니다. dependency injection을 이용해서 factory의 롤을 spring container에 맡길 수 있는지 체크해보는 것도 좋겠습니다. factory를 사용하지 않더라도 특이한 상황을 제외하고는 대부분의 클라이언트는 어떤 서비스가 필요한지 알고 있을겁니다. net.slipp.service.board.BulletinBoardFinder net.slipp.service.board.QnaBoardFinder

@eclipse4j 저도 가급적이면 prefix와 postfix를 이름에 넣지 않으려 노력합니다만 가독성이 문제가 되는 상황이라면 넣는 경우도 있습니다. 패키지가 다른 경우는 문제가 되지 않지만 같은 경우는 문제가 될수 있고 클래스를 나누고 싶을 경우가 그런 상황입니다.

2013-03-04 15:21

ologist 중복된 도메인을 체크함에도 불구하고 겹치는 이름이 나온다면 그거슨.... Class 역활을 비교해보고 Class Rename 을 고려해야하지 않을까요???

동일한 역활의 Class 들이 각기 다른 시그니쳐를 가진 상황이라면 Adpator 를 고려해볼것같습니다. ;;;

2013-03-04 15:57

@양완수 네, 일반적인 경우는 클래스가 합쳐지는 경우가 많을 것입니다. 그럼에도 불구하고가 질문입니다..ㅎㅎ 자바는 패키지가 있기때문에 물리적으로는 대부분 별이슈가 없습니다. 다만 논리적으로 prefix같은 것이 덜 생기게 하는 것이 중요할 것 같네요.

의견 추가하기

연관태그

← 목록으로