2012-04-02 2 views
8

JDBC (Spring, Hibernate 또는 다른 것 없음)를 사용하여 Java에서 간단한 DAO를 작성하고 있습니다.DAO 패키지 구조

구현 DAO를 인터페이스와 동일한 패키지에 넣거나 하위 패키지에 넣는 것이 더 좋습니까?

예 : 하위 패키지 이름으로 제안 무엇

com.mycompany.myproject.dao.MyDao 
com.mycompany.myproject.dao.MyDaoImpl 

또는

com.mycompany.myproject.dao.MyDao 
com.mycompany.myproject.dao.impl.MyDaoImpl 

당신이 서브 패키지 구조를 제안하는 경우? .impl? .sql? .jdbc?

현실적으로 필자는 다중 구현을 수행하지 않을 것입니다. 나는 이것을 과도하게 엔지니어링하고 있는가?

+0

대체 구현이 전혀 없습니까? 단위 테스트 모의조차도? –

답변

5

응용 프로그램을 설계 할 때 표준 패키지로 구조화하는 방법은 없지만 경험은 대개 각자가 우리 패키지에 적합한 이름이 무엇인지 결정하는 데 도움이되는 것입니다.

동일한 패키지 또는 다른 패키지의 인터페이스 구현을 패키징하는 것에 대해 Java 자체의 구조에 대해 생각해보십시오. 일반적으로 구현 클래스는 인터페이스와 동일한 패키지에 패키지되어 있지만 항상 그렇지는 않습니다.

동일한 DAO를 여러 번 구현하려는 경우 .jdbc, .jpa 또는 .jdo 하위 패키지로 구조화하는 것이 좋습니다. 하나의 구현만을 가지려고한다면 열거하는 옵션 모두가 어떤 방식 으로든 의미가 있습니다 (동일한 패키지 또는 .impl 하위 패키지).

오버 엔지니어링에 대해서는이 article을 추천합니다. DAO를 단 하나의 구현으로 구현하려고해도 인터페이스와 구현으로 정의하게되면 나중에 DAO를 다른 프레임 워크로 재 작성하는 데 도움이 될 것입니다. 그것들은 변함없이 유지된다.

마지막으로 귀하 (또는 귀하와 동료)가 합의에 도달하여 귀하의 구체적인 경우에 더 적합한 결정을 내릴 수 있습니다.

편집

응용 프로그램은 일반적으로 DAO 인터페이스 당 하나의 구현을 가지고 있으며, 그것은 단순히 JDO JPA과 구현 같은 DAO 인터페이스를 가지고 이해가되지 않습니다, 전혀 이상 엔지니어링 아니다 . 인터페이스/구현 패턴을 사용하는 목적 중 일부는 다시 팩토링, 모의 객체를 이용한 테스트 등을 용이하게하기위한 것입니다.

PS : 대부분 애플리케이션 사이클을 주기로 피하는 패키지로 배포하려면 JDepend에 의존합니다. 할 수있는 한.

2

나는 어느 쪽이든이 이 더 좋다고 생각하지 않지만인데,이 경우 나는 첫 번째 대안을 선호합니다. ArrayList, LinkedList 등이 List과 같은 패키지에있는 것과 일치합니다.

hibernate과 같은 추가 프레임 워크를 사용하는 경우 MyDaoHibernateDao을 구현 자로 사용하는 두 번째 옵션을 선호합니다.

0

네임 스페이스와 패키지는 충돌을 방지하기 위해 존재합니다. 독특한 것이 아니라면 어느 쪽도 바람직하지 않습니다.

+1

그럼 패키지를 길고 임의의 문자열로 이름 지어도 괜찮습니까? 민감한 패키지 이름을 사용하면 사람들이 API를 쉽게 탐색 할 수 있고 리팩터링을 쉽게 할 수 있습니다. 또한, 구현 및 인터페이스는 패키지에서 내보내기 및 종속성을 지정하는 환경에서 우수 사례입니다. 종종 인터페이스 또는 구현에만 의존하기를 원할 것입니다. –

+0

내 답변은 OP의 경우에만 해당됩니다. 그/그녀의 제안 된 대안 사이에 객관적인 차이가 없습니다. 귀하의 의견에 관해서는 이해할 수있는 네임 스페이스를 만드는 것이 상식이라고 말할 수 있습니다. – nsfyn55

2

임 플렉스를 가져 오면 임포트에서 즉시 볼 수 있고 다른 프로젝트에서 임프레이션을 옮기려면 리팩토링이 더 간단하므로 두 번째 옵션을 사용합니다 (실제로는 아무 것도 없습니다).

이것은 과도한 엔지니어링이 아닙니다. 이 DAO 사용하는 여러 장점 : 그것은 쉽게 만든 코드를 테스트 다른 고려 사항

  • 에서 데이터베이스 액세스 디커플링하여 코드의 품질을 향상

    1. 는 당신은 미세한 입자로 테스트 할 수 있습니다.
    2. 언젠가 Hibernate가 실제로 훨씬 더 쉽다는 것을 알게되면 나머지 코드에도 영향을주지 않을 것입니다.