이름이 같은 클래스를 처리하는 방법 (다른 패키지)


9

나와 R & D 팀은 큰 코드베이스를 유지 관리합니다. 비즈니스 로직을 여러 패키지로 나누었습니다. 일부는 이름이 같은 클래스 를 가지고 있습니다 .

짐작할 수 있듯이 두 클래스가 모두 동일한 Java 파일에서 참조 될 때 이름이 충돌합니다.


예를 들면 다음과 같습니다.

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

우리는 이러한 사례를 다루는 가장 좋은 방법이 무엇인지에 대해 토론했으며 다음과 같은 옵션이 나타났습니다.

첫 번째 옵션

  • 접두사를 추가하여 클래스 이름 바꾸기

    ModelDevice
    DataDevice
    

두 번째 옵션

  • 둘 다 참조 될 때 전체 패키지 + 클래스 이름 사용

    com.myapp.model.Device
    com.myapp.data.Device
    

코드 관리 및 확장 성 측면에서 더 올바른 것은 무엇입니까?

우리는 현재 두 가지 접근법을 혼합하고 불일치하기 시작했습니다.


가끔 발생하는 경우에는 중요하지 않을 것입니다. 반복되는 패턴 인 경우 클래스가 더 엉망이되지 않도록 클래스 이름을 더 정확하게 지정합니다.
assylias 2016 년

당신은 많은 I를 싫어 얼마나 아무 생각이 없다 java.util.Date하고 java.sql.Date특히 이후 - java.sql.Date의 서브 java.util.Date너무 친절하고 데이터 층으로 미끄러 (및 JSON으로 직렬화 잘하지 않습니다).

옵션 2.1 다른 이름을 참조하지 않더라도 항상 정규화 된 이름을 사용하십시오
Caleth

답변:


18

패키지 이름을 사용하십시오. 이러한 유형의 문제는 Java가 패키지 이름 지정 규칙을 사용하는 이유입니다. 같은 회사에있는 두 팀이든 지구 반대편에있는 두 팀이든 관계없이 이러한 종류의 문제를 방지합니다.


1

현재로서는 ModelDevice 클래스가 하나 있습니다 (모델 패키지의 Device). 다른 분류를위한 다른 ModelDevice가있는 경우 어떻게합니까? 문제는 계속 지속될 수 있으며 오버 헤드도 계속 증가합니다.

당분간 클래스 이름 바꾸기 클래스가 도움이 될 수 있지만 장기적으로 제안 된 대안은 패키지 이름을 접두어로 사용하는 것입니다. 이는 업계 표준입니다.


0

아직 언급되지 않은 측면을 추가하려면 다음을 수행하십시오.

사용 패턴, 즉 하나 또는 두 클래스를 모두 참조하는 Java 소스를 살펴보십시오.

IMHO는 대부분의 경우 소스 파일이 충돌하는 클래스 중 하나만 참조해야하며 컨텍스트에서 모델 또는 데이터 세계를 처리하는지 명확해야합니다. 어떤 이유로 든 어려운 경우 일반적으로 소스 코드에서 패키지 접두사 클래스 이름을 좋아하지 않기 때문에 클래스 이름을 바꿉니다 (가독성이 떨어짐).

두 세계를 모두 다루는 소스 파일이있는 경우, 세계의 두 가지 다른 관점 사이에서 변환 할 수있는 공명을 가진 클래스를 연결할 수 있습니다. 여기에서는 패키지 접두사 클래스 이름을 선호합니다.

그러나 한 소스에서 두 디바이스 클래스를 모두 보는 것은 소스가 모델과 데이터 세계의 태스크를 혼합하여 단일 책임 원칙을 위반한다는 암시 일 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.