2012-01-26 2 views
1

DAO를 다른 DAO에 주입 할 때 DAO 범위를 이미 지나치며 비즈니스 계층 문제에 도달했다고 할 수 있습니까?DAO의 올바른 사용법 (두 가지 시도)

참고 : 특히 염두에 두어야 할 것은 없지만 DAO 사용과 관련하여 일반적인 경험 법을 추출하려고합니다.

+0

비즈니스 로직을 설명하는 관리자/컨트롤러 클래스 내에서 DAO 호출을 만들고 있습니까? 그렇지 않다면 그것은 위반으로 간주 될 수 있지만 실제로 추측하는 특정 경우에 달려 있습니다. –

답변

1

예. DAO는 서로 의존해서는 안됩니다.
서로 다른 DAO를 조정하는 것이 비즈니스/서비스 계층의 임무입니다.

그러나 특정 시나리오를 설명하면보다 정확한 답변을 제공 할 수 있습니다.

편집 :
@의 edutesoy의 답변을 읽은 후, 나는 그의 주장에 논리를 참조하십시오.
그래서 내 대답을 수정하겠습니다. 은 본질적으로이 아니지만 조금 '냄새 나는'것입니다.

이것은 DAO 레이어의 일반적인 구조 때문입니다. 일반적으로 각 유형의 엔터티 (CustomerDAO, OrdersDAO 등)에 대해 DAO가 있습니다. CustomerDAOPaymentsDAO을 사용하는 경우 SRP 위반과 같은 약간의 냄새가납니다. 즉, 지불 관련 작업도 담당하는 CustomerDAO입니까?
결론적으로 필자는 필자가 코드에 소개하기 전에이 문제에 대해 아주 좋은 이유를 분명히 요구할 것입니다.

+0

특별히 없습니다. 나는 단지 일반적인 경우에 대해 물어 보았고, 정렬하기 위해 이것에 대한 경험 법칙을 추출했습니다. – preslavrachev

+0

내 답변 편집을 읽습니다. 각 사례를 자체적으로 판단하는 것이 중요하다고 생각합니다. –

3

DAO와 비즈니스 간의 구분은 "임의"입니다. 클래스는 "저장소 저장소에서 데이터를 검색하고 저장"하는 데 사용되는 DAO라고합니다. DAO를 다른 DAO에 삽입한다고해서 "저장소 리포지토리에서 데이터를 검색 및 저장"하지 못하기 때문에 귀하의 질문에 대한 대답은 NO입니다.

DAO를 다른 곳에 주입 할 수 없다는 말은 없습니다.

0

DAO가 무엇인지 생각해보기 시작할 수 있습니다.

JPA를 사용하는 경우 entiy 관리자는 이미 DAO 패턴에 따라 일반 DAO입니다. 대부분의 Java EE 개발자가 DAO라고 부르는 것은 DAO 패턴에 의한 DAO가 아닙니다. 그것은 어떤 종류의 리팩토링입니다 : 데이터베이스 관련 명령문을 외부 클래스로 이동하십시오 (그리고 저는 이것이 여러분이 말하는 DAO의 종류라고 생각합니다). 잘못 이해하지 마십시오. 이것이 유용하다고 생각합니다.

그래서이 DAO에 대한 이해는 약간의 리팩토링입니다. 리팩토링의 전반적인 목표는 코드를보다 읽기 쉽고 유지 보수하기 쉽게 만드는 것입니다. 따라서 코드가이 인다이렉션으로 더 나아진다면 계속 진행하십시오. 그러나 프로젝트 DAO-Pattern이 다른 Java EE 개발자가 사용하는 DAO 패턴과 약간 다르다는 것을 문서화해야합니다.

관련 문제