Шаблон проектирования DAO и использование его в нескольких таблицах - PullRequest
18 голосов
/ 24 марта 2010

Мне нужна обратная связь по шаблону Объект доступа к данным и его использование при необходимости доступа к данным из нескольких таблиц. Кажется, что этот шаблон, который имеет DAO для каждой таблицы вместе с объектом передачи данных (DTO), представляющим одну строку, не слишком полезен для работы с данными из нескольких таблиц. Я думал о создании составного DAO и соответствующего DTO, который бы возвращал результат, скажем, выполнения объединения двух таблиц. Таким образом, я могу использовать SQL для сбора всех данных вместо того, чтобы сначала получить данные из одного, используя один DAO, а затем из второй таблицы, используя второй DAO, и затем собрать их вместе в Java.

Есть ли лучшее решение? И нет, сейчас я не могу перейти на Hibernate или другой инструмент ORM. Просто прям JDBC для этого проекта.

Ответы [ 2 ]

12 голосов
/ 24 марта 2010

Я бы согласился с вашим подходом. Мои DAO имеют тенденцию выравниваться больше на уровне объекта, а не с точки зрения таблицы БД. Я могу управлять несколькими объектами через DAO, но они, скорее всего, будут тесно связаны. Нет никаких причин не иметь доступа SQL к двум таблицам, находящимся в одном DAO.

И для записи я исключил аббревиатуру DTO из своего словаря и кода.

3 голосов
/ 22 января 2013

В идеале, то, как вы храните свои данные в базе данных, а затем то, как вы к ним обращаетесь, должно быть основано на характере отношений между сущностями домена в вашей доменной модели. То есть реляционная модель должна следовать из модели предметной области. Например, если у вас есть две сущности, скажем, Пользователь и Адрес.

Сценарий # 1 : Адрес никогда не доступен независимо, он всегда является атрибутом пользователя. В этом случае Address - это объект-значение, а пользователь - это сущность, и есть инструкции о том, как сохранить эту связь. Один из способов - хранить атрибуты Address вместе с атрибутами User в одной таблице. В этом случае UserDao будет обрабатывать оба объекта.

Сценарий # 2 : Адрес может быть связан с пользователем, но также может быть отдельным объектом. В этом случае необходим подход, отличный от первого. У вас может быть отдельный DAO и таблица для типа адреса.

Я хочу сказать, что чаще всего игнорируется эта важная идея о том, что Доменная Модель должна быть ядром приложения, управляя другими уровнями.

Например, если ваша модель предметной области правильно определена, и вы хорошо знаете тип сущностей, которые у вас есть, и отношения между ними, то ваша стойкость (реляционные таблицы и их отношения, ваши DAO и т. Д.) Будет развиваться как очень логичное следствие того, что вы имеете в доменной модели.

Другими словами, если вы потратите некоторое время на изучение вашей модели, вы сможете проследить свою проблему при определении того, как организовать ваши DAO в соответствии с моделью домена. Если вы сможете четко определить тип объектов и характер отношений между ними в доменной модели, это поможет вам решить вашу проблему на уровне DAL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...