Уровень доступа к базе данных Java JDBC - PullRequest
0 голосов
/ 20 февраля 2012

Верна ли моя идея?

Как обычно реализуется уровень доступа к базам данных Java? Я думаю, у меня есть класс DBAL, который имеет функции, такие как

  • save (Object obj)
  • delete (объект obj)
  • findOne (тип String, столбец String, значение String)
  • findAll (строковый тип, строковый столбец, строковое значение)

save и delete будут принимать классы объектов домена, например. Product, User ... затем выполните соответствующие действия

findOne и findAll примут type, которое соответствует имени таблицы, затем столбцу и значению, используемому для предложения WHERE. Очень упрощенно, но мне интересно, если идея верна?

Обычно я вижу, что многие сайты имеют DAO, но не будут ли ProductDAO и UserDAO очень похожими? Я мог бы объединить их в 1 класс DBAL?

Имитация ORM

Исходя из фона ORM. Мне интересно, как будет работать ResultSet.getObject, будет ли он работать как ORM, где я запрашиваю таблицу пользователей и могу ли я получить обратно List<User>, например?

1 Ответ

4 голосов
/ 20 февраля 2012

Существует много способов реализации уровня доступа к базе данных в Java, и такие же шаблоны применимы и к другим языкам.Простейшей формой будет шлюз табличных данных .В этом шаблоне есть экземпляр шлюза для каждой таблицы базы данных.Другими шаблонами для DAL являются Шлюз таблицы строк , в котором имеется экземпляр шлюза для каждой строки базы данных в таблице. Active Record , где объект домена знает, как общаться с самой базой данных. Data Mapper , где данные перемещаются между объектами домена и базой данных, сохраняя их независимыми друг от друга и самого преобразователя.У каждого из этих подходов есть свои плюсы и минусы.Попробуйте найти шаблоны, которые я упомянул, и посмотреть, что лучше всего подойдет для вашего приложения.

Основная причина, по которой люди делят подклассы на свои базовые DAO (TDG, TRG, что у вас), заключается в предоставлении явного, четкого типабезопасный интерфейс для каждого типа объекта домена + это облегчает клиентам поиск нужной функции доступа к данным, необходимой им для реализации варианта использования.Аналогичный код абстрагируется в базовом классе ...

Если вы находитесь на начальной стадии приложения, я бы порекомендовал вам использовать инструмент для работы с доступом к данным (например, Hibernate).Эти инструменты очень универсальны, и с ними миллионы проблем, но, по крайней мере, вы можете сначала сосредоточиться на правильном подходе к бизнес-логике, а затем беспокоиться об этих проблемах, которые находятся за пределами вашей области приложений.Если выясняется, что проблема, в конце концов, существует, и кажется, что ваше программное обеспечение успешно работает, вы можете продолжить работу над доступом к данным, чтобы повысить производительность или другую головную боль, которую дает вам выбранный вами инструмент.Я говорю это только потому, что сделать хорошее домашнее решение для доступа к данным довольно сложно, и это займет много времени.Подумайте о проблемах параллелизма, сопоставлении идентификатора базы данных с экземпляром (ями) памяти и т. Д. И т. Д.

Что касается вашего вопроса о ResultSet.Нет, getObject получит значение указанного столбца в текущей строке этого объекта ResultSet в виде объекта.Поэтому вы должны выполнить приведение самостоятельно, и поэтому также неплохо иметь Factory из ResultSet для объектов вашего домена, если вы идете по этому пути.

Это огромная тема, и я извиняюсьесли я не могу вдаваться во все шаблоны более подробно.У меня также есть работа над собой :-) Если вы решите сделать свой собственный, вместо того, чтобы использовать «стандартный» инструмент, я был бы рад ответить на больше ваших вопросов после того, как вы выяснили, какой из шаблонов, которые я здесь упомянул, будетлучший набор ваших потребностей.

С уважением.

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