Существует ли общепринятая практика проектирования Java-объектов, которые часто загружаются и сохраняются в и из баз данных?
Подход, который я сейчас использую, заключается в том, чтобы иметь один основной объект базы данных, который открывает соединениев базу данных.В любом месте приложения, где мне нужно загружать или сохранять объекты, я создаю исходный интерфейс для загрузки и сохранения.Например, я мог бы сделать что-то вроде этого:
public interface CalendarSource {
public Appointment[] getAppointmentsForMonth(int year, int month);
public void saveAppointment(Appointment appointment);
}
Затем я бы реализовал этот интерфейс в основном объекте базы данных.Любые суб-данные также загружаются в объекты-члены внутри основных объектов.Например, если есть список гостей для каждой встречи.Это хорошо работает, так как все данные, которые я использую, поступают из одной из двух баз данных, поэтому я сохраняю два соединения с базой данных, и каждый источник реализуется одной из них.
Проблема в том, что это простокажется громоздким время от времени.Это сбивает с толку, как обрабатывать значения идентификаторов, так как я действительно не хочу добавлять их в мои объекты.Также требуется одно соединение с базой данных для реализации нескольких различных интерфейсов.По сути, мой пакет базы данных должен полагаться почти на каждый пакет в проекте, потому что он реализует все интерфейсы.Это имеет смысл на определенном уровне, но мне интересно, есть ли лучший способ.
Есть две основные причины, по которым я выбрал эту архитектуру:
- Я бы хотелобъекты, которые я использую, чтобы не знать, что они загружены или сохранены из базы данных.Я мог бы захотеть заменить этот источник базы данных в будущем плоскими файлами для переносимости.
- Я хотел бы иметь хорошую иерархию зависимостей пакетов.Код базы данных должен быть изолирован, чтобы изменение схемы базы данных можно было легко обновить до кода.
Одна проблема, с которой я сталкиваюсь, это что делать со значениями ID.Поскольку объекты не должны знать, что они являются объектами базы данных, в них не должно быть поля идентификатора.Но если я пытаюсь записать объект в базу данных, и у меня нет значения идентификатора, как я должен знать, должен ли я делать вставку или обновление?
Я также обеспокоено том, чтобы пакет базы данных расширял все на протяжении всего проекта.Я постоянно передаю эти исходные интерфейсы.Полагаю, это тоже имеет смысл.
Может быть, я просто ищу подтверждение того, что я делаю это правильно, и здесь нет какого-то очевидного простого решения, которого я не вижу.Не поймите меня неправильно - все прекрасно работает.
Есть мысли?