2012-01-05 2 views
1

를 사용하여 우리의 사용자에 우리 사람을 얻을 수있는 가장 좋은 방법은 무엇입니까 : 우리 도메인에는 사용자가 아닌 사람 (사람 :-)이 있습니다. 그래서 우리는 단지 그들을 결합 할 수 없습니다.내가 두 개의 도메인 개체가 스프링 JdbcTemplate을

사용자 개체를 채우는 가장 좋은 방법을 알아 내려고하고 있습니다. 나는 가능한 3 가지 해결책을 생각해 냈고 다른 사람들이 한 것과 다른 사람들이 볼 수있는 장단점에 대해 궁금해했다.

옵션 1 :

우리 UserDao와 PersonDao 우리 Userservice에 유선 다음 userService.getUser(userId) 호출 userDAO.getUser(userId) 우리가에서 돌아올 사용자를 가지고 전화 user.setPerson(personDao.getPerson(user.getPersonId()))

프로이 있나요 : 돈을 dao 안에 dao에 배선하지 않아도됩니다. (그다지 나쁜 것은 아닙니다 ... 확실하지 않습니다)

단점 : hav DAO를 보내면 완전히 초기화되지 않은 도메인 객체를 반환합니까? 그런 다음 User 객체에 사람이 있는지 여부에 대해 걱정해야합니다. 데이터베이스를 두 번 친다. 또한 Person 객체를 갖는 대신 User 객체에 personId를 추가해야합니다.

옵션 2 : 필요가 없습니다 : 는 UserDao의 인 getUser() 메소드가 사람 테이블과 사용자 테이블에 가입 한 후 다음 UserRowMapper 설정 내부 사용자와는 user.setPerson(personRowMapper.mapRow(rs, rowNum))

프로 전화 되세요 dao 안에서 dao의 철사 (그렇게 나쁘지는 않다. .. 확실하지 않은). 또한 다른 옵션에서 데이터베이스를 두 번 누르는 대신 데이터베이스를 한 번만 누르십시오.

단점 : PersonRowMapper는 자체 클래스이고 PersonDao에 캡슐화되지 않습니다 (?).

옵션 3 :

PersonDao이 UserDao에 유선 후 바로 전화를 했 프로user.setPerson(personDao.getPerson(rs.getLong("person_id")));

다음 personDao는 사람 도메인 오브젝트를 얻는 담당하고 userDao하지 않습니다 그 사람이 어떻게 검색되었는지에 대한 세부 사항을 알아야합니다.

단점은 다음 personDao는 userDao으로 유선 (나쁜 점이다?)한다. 데이터베이스를 두 번 친다.

답변

1

두 번째 옵션은 데이터베이스를 두 번 치는 것이 비용이 많이 든다는 것입니다.

나는 하나 개의 제안이,이 안, 사용자는 오히려 사용자보다 사람 (상속)하는 사람 (구성) 응답에 대한

+0

감사가 있습니다. 나는 동의한다. .. 그리고 그렇게 Marten Deinum :). http://forum.springsource.org/showthread.php?120868-What-is-the-best-way-to-get-our-Person-into-our-User-using-spring-jdbcTemplate&p=395709#post395709. 사용자가 사람인 경우, 대부분의 시나리오에서 정확하지만 우리가하는 일과 반드시 ​​일치하지는 않습니다. 다시 한 번 감사드립니다! – testing123