문제

나는 Spring을 사용하는 프로젝트를 가지고 있으며 수십 개의 daos와 관련 DTO로 분류됩니다. 나는 JDBCTemplate을 사용하고 있지만, 내가 행복한 추상화 수준이기 때문에 그다지 많지는 않습니다.

나는 현재 그들의 털이 많은 코드를 그들의 getters에 배치하여 DTO에 게으른로드를 수행하고 있습니다.

기본 보일러 플레이트 논리는 다음과 같습니다. 1. 필드가 무효가 아닌 경우 값을 반환하고 값을 반환합니다. 2. 적절한 DAO에 연락하여 관련 DTO를 가져 오십시오.

내 낮은 DTO가 많은 Daos와 결합되어 있고 그렇게 pojoey가 아니라는 점을 제외하고는 잘 작동합니다.

DTO에 대한 CRUD와 게으른 하중을 모두 처리하기 때문에 DAO에 논리를 배치하면 또 다른 코드 냄새가 나타납니다.

DAO와 DTO 사이에 게으른 로더 객체를 주입하는 데 사용할 수있는 비교적 간단한 스프링 접근 방식이 있기를 바랍니다. 그러나 다른 솔루션은 저에게 효과적입니다.

어떤 아이디어?

도움이 되었습니까?

해결책

Dao의 주위에 Dao를 감싸는 것이 더 쉽습니다 ... 그것은 당신이 가져오고 싶은 모델의 양에 달려 있습니다. DTO는 일반적으로 둘 이상의 별도의 데이터베이스/DAO 호출로 그들과 함께 많은 사람들을 가져 오는 데 사용되지 않습니다. 이 경우 당신은 정말로 orm을 원합니다. 당신이 dao 대답을 찾고 있기 때문에 ......

Dao를 함께 연결하여 하나의 DTO를 제공하는 것을 막을 수있는 것은 없습니다. 더 쉬운 그런 다음 DTO를 DAO에 연결하는 것이 더 쉽습니다. 실제로 서비스 계층이 아니라 Dao의 빌딩 블록 일뿐입니다. 따라서 persondao와 전화기가있을 수 있습니다. 사람은 하나 이상의 전화 번호를 가질 수 있으므로 Persondao와 전화기를 사용하여 작업을 수행하기 위해 Persondao와 ThinkoneNumberdao를 사용하는 PersonModeldao를 가질 수도 있습니다.

또는 전체 문제를 피하고 DTO 수준에서 사람과 전화 번호 사이에 1-N을 매핑하려고 시도하지 마십시오. UI가 오른쪽 다오로 올바른 전화를 걸도록하십시오. 나는 DTO를 사용할 때 실제로 이것을 더 좋아합니다.

다른 팁

DAO를 감싸고 그런 문제를 처리하는 서비스 계층을 소개하는 것이 일반적입니다. 당신이 두려워한다면 당신이 게으른로드를 처리하기 위해 너무 많은 보일러 플레이트 코드를 DTO에 넣는 것이 너무 많습니다. 아마도 AOP를 사용하는 것이이를 달성하는 방법 일 수 있습니다. Compile Time 또는 Load Time에서 Sagej를 조사하고 직조 할 수 있습니다. 바이트 코드를 직접 수정하므로 프록시 기반 AOP의 성능 오버 헤드에 대해 걱정할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top