@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, а сделать просто поле, которое будет хранить первичный ключ соответствующей роли.

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

И я как-то пока не могу придумать гибкого, красивого решения.
  • Вопрос задан
  • 3717 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Cauac
Java Developer

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

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

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

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

Похожие вопросы