У меня есть два объекта домена:
- Пользователь (у которого есть персона)
- лицо
FYI : В нашем домене есть Персоны (people :-), которые не являются пользователями, поэтому мы не можем просто объединить их.
Я пытаюсь выяснить, как лучше всего заполнить объект Person в объекте User. Я предложил 3 возможных решения, и мне было любопытно, что сделали другие, и какие плюсы и минусы увидели другие.
Вариант 1:
Подключите наши UserDao и PersonDao к нашей Userservice, а затем userService.getUser(userId)
вызовите userDAO.getUser(userId)
, затем возьмите пользователя, от которого мы получаем ответ, и позвоните user.setPerson(personDao.getPerson(user.getPersonId()))
Плюсы : Не нужно подключать дао внутри дао (не так ли плохо ... не уверен)
Минусы : Что-то не так, когда дао возвращает объект домена, который не был полностью инициализирован, верно? Тогда вам нужно беспокоиться о том, есть ли человек в объекте User. Попадание в базу данных дважды. Также вам необходимо добавить personId к объекту User вместо того, чтобы просто иметь объект Person.
Вариант 2:
Пусть метод UserDao getUser () объединит пользовательскую таблицу с таблицей person, а затем внутри UserRowMapper установит пользователя и затем вызовет user.setPerson(personRowMapper.mapRow(rs, rowNum))
Плюсы : Не нужно подключать дао внутри дао (не так ли плохо ... не уверен). Кроме того, вы нажимаете на базу данных только один раз, вместо того, чтобы дважды нажимать на базу данных в параметрах.
Минусы : PersonRowMapper будет своим собственным классом и не будет инкапсулирован в PersonDao (должно быть?).
Вариант 3:
Подключите PersonDao к UserDao, а затем просто позвоните user.setPerson(personDao.getPerson(rs.getLong("person_id")));
Плюсы : PersonDao отвечает за получение объекта домена Person, и userDao не нужно знать подробности о том, как этот человек был извлечен.
Минусы : personDao подключен к userDao (это плохо?). Попадание в базу данных дважды.