@miroshnik
android/java dev

Как правильней сделать DAO слой?

Здравствуйте!

Делаю небольшой веб-проект на java + gwt в целях самообучения.

Связь с БД через JDBC. Hibernate не использую.

Сейчас пишу слой DAO и возникли вопросы.

Возьмем, к примеру, три сущности: User, Role, Permission. У User есть 1 Role, у Role есть 1 или более Permission.

Если перенести все в ООП модель, то будет класс User, в нем ссылка на Role, а у Role будет список Permission.

Теперь, предположим, нам надо достать из БД какого-то User'a. Получается, что придется тянуть еще и все остальное (Role и список Permission). Role еще ладно, там всего 1-запись надо достать. А вот Permission целый список. При этом, я привел самый простой пример, ведь может цепочка может быть намного длиннее.

Другой вариант, это не делать поле Role в классе User, а сделать просто поле, которое будет хранить первичный ключ соответствующей роли.

Второй вариант какой-то не красивый и не соответствует модели.

И я как-то пока не могу придумать гибкого, красивого решения.
  • Вопрос задан
  • 3710 просмотров
Решения вопроса 1
@gurinderu
java developer
inner join и заполнять еще и вложенные объекты в дао. Если у вас это слишком сложно. То сделайте метод getRoles lazy

Оберните ваш User в прокси, который будет на getRoles если roles==null вызывать метод дао и записывать в User
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Cauac
Java Developer

Второй вариант какой-то не красивый и не соответствует модели.

Ваш вариант вполне хорош при условии что это первичный ключ уже содержит достаточно информации.
Но если есть необходимость в модели используйте шаблон Proxy. Т.е. создавайте частично инициализированные объекты и делайте запросы для загрузки остальных данных по необходимости.
Ответ написан
Комментировать
targetjump
@targetjump
Как я понимаю, Вы используете реляционную БД, а значит Вы можете обойтись 1 запросом, судя по всему пермишинов у одного юзера так же не будет много, а значит проблемы как таковой то и нет.

Если все же не хочеться фетчить всю инфу о юзере сразу, то можно сделать Прокси имплементации для тех сущностей которые не хочеться таскать за собой, этот подход будет хорош если Вам нужно выбирать много юзеров сразу и у юзеров есть инфы больше чем будет занимать прокси инстанс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
07 мая 2024, в 17:22
140000 руб./за проект
07 мая 2024, в 17:11
2000 руб./за проект
07 мая 2024, в 17:06
10000 руб./за проект