Персональный проект на Java, как подойти к доступу к базе данных? - PullRequest
1 голос
/ 26 декабря 2010

Моим первым проектом на java будет программа (в конечном итоге мне придется создать интерфейс с графическим интерфейсом, но пока CLI), чтобы отслеживать мои книги (что-то похожее на то, что в библиотеках есть только проще). Мне нужно иметь возможность вставлять, обновлять, удалять, показывать все книги, обновлять, искать (по имени, автору или дате).

Для разработки я подумал об одной библиотеке основного класса, которая будет иметь все вышеперечисленное как методы, которые подключаются к БД и извлекают данные.

Этот подход в порядке? Я понимаю, что это просто, но это мой первый настоящий проект, и я был бы признателен за небольшую обратную связь.

Кроме того, не слишком ли рано изучать шаблоны проектирования и проектирования баз данных?

Ответы [ 5 ]

5 голосов
/ 26 декабря 2010

Вы хотите посмотреть шаблон DAO (Объект доступа к данным) .

Сначала создайте класс Javabean, представляющий одну книгу (также называемую сущностью ).

public class Book {

    private Long id;
    private String title;
    private String author;
    private Date date;

    // Add/generate c'tor/getter/setter/hashcode/equals/tostring boilerplate.
}

Затем создайте класс DAO, который выполняет нужные операции.на книгах.

public class BookDAO {

    public Book find(Long id) throws SQLException {
        // ...
    }

    public List<Book> search(Book example) throws SQLException {
        // ...
    }

    public List<Book> list() throws SQLException {
        // ...
    }

    public List<Book> listByDate(Date before, Date after) throws SQLException {
        // ...
    }

    public void save(Book book) throws SQLException {
        // ...
    }

    public void delete(Book book) throws SQLException {
        // ...
    }

}

В этом классе вы можете написать все необходимые шаблоны JDBC.

Наконец, в конечном итоге вы можете использовать его следующим образом:

Book newBook = new Book("Pro JPA 2", "Merrick Schincariol");
bookDAO.save(newBook);
// ...
Book book = bookDAO.find(1L);
// ...
List<Book> allBooks = bookDAO.list();
// ...
List<Book> matchingBooks = bookDAO.search(new Book(null, "Schincariol"));
// ...

Подробную статью с основными примерами запуска вы можете найти здесь .


Чтобы продвинуться дальше, вас может заинтересовать JPA (Java Persistence API).Он добавляет дополнительный слой поверх JDBC, так что вы можете взаимодействовать с БД более объектно-ориентированным образом без необходимости писать весь шаблон JDBC.Правда, это часть Java EE, но вы также можете использовать ее независимо.См. Также это руководство по использованию JPA в настольных / клиентских приложениях.

1 голос
/ 26 декабря 2010

Хотя это может быть излишним для вашего небольшого личного приложения, вы можете рассмотреть трехуровневый подход.Благодаря многоуровневой архитектуре управление данными логически разделено на несколько уровней.Например, трехуровневый, как правило, UI -> Business Logic -> Data Access.

Каждый слой знает только о том, что под ним.Пользовательский интерфейс выполняет вызовы на бизнес-уровне, который выполняет вызовы на уровне доступа к данным, который в конечном итоге запрашивает базу данных.Также эти слои часто бывают многоуровневыми.Например, обычно рекомендуется использовать шаблон проектирования DAO, а также использовать уровень обслуживания, который дополнительно абстрагирует уровень DAO и, возможно, выполняет дополнительную бизнес-логику, поэтому ваша архитектура может выглядеть следующим образом:

UI => Business Logic => Service => DAO

В вашем случае модель вашего домена довольно проста.У вас есть одна сущность домена, книга.Это единственный постоянный класс.Еще раз, среда ORM, такая как Hibernate, может быть излишней, но это очень удобный инструмент для изучения.Возможно, стоит использовать, поскольку это делает невероятно простым сохранение данных.

1 голос
/ 26 декабря 2010

Вам также понадобится хотя бы класс Book - трудно представить, как бы выглядел интерфейс вашей библиотеки в противном случае. Хорошей идеей является создание интерфейса библиотеки вместо класса, чтобы вы могли иметь несколько реализаций для хранения - теперь вы хотите использовать БД, а затем можете внезапно захотеть использовать XML. Я бы также рекомендовал не делать класс библиотеки основным, а делать отдельный класс LibraryCLI. Затем вы можете добавить LibraryGUI позже, не делая ничего с самим классом Library. Разделение всегда хорошо.

И нет, никогда не бывает слишком рано читать шаблоны проектирования. Чем раньше вы начнете понимать эти вещи, тем лучше. В противном случае вы просто получите неиспользуемый и не поддерживаемый код. Что ж, в конечном итоге вы, возможно, все-таки получите некоторые из них, но в меньшей степени, и вам, вероятно, будет гораздо легче исправить это, если вы хотя бы попытаетесь понять, как это сделать, прежде чем их реализовывать.

0 голосов
/ 26 декабря 2010

Лучше было бы использовать шаблон проектирования вместо статических методов.

0 голосов
/ 26 декабря 2010

Я бы предложил вам использовать Hibernate, инструмент для использования объектно-ориентированного интерфейса с базой данных.В вашем проекте у вас будет группа классов бинов, соответствующих объектам БД, и некоторые файлы конфигурации и отображения XML.Существует также инструмент обратного инжиниринга для автоматического создания этих классов и XML из вашей БД.Таким образом, вы можете сделать это: спроектировать БД (начиная со схемы Entity-Relationship), создать ее, установить, например, Hibernate внутри Eclipse, запустить реверс-инжиниринг Hibernate, а затем запустить проект программы (сначала на бумаге, а затем с кодом).; таким образом, вы избежите много раздражения потом.)

Hibernate - инструмент высокого уровня.Если вы пишете эту программу в качестве упражнения для изучения доступа к Java и БД, лучше начать с основ (JDBC и т. Д.).

В любом случае, я уверен, что программ дляведение книг.Лично я предпочитаю социальную сеть anobii.com , где вы можете управлять, а также обмениваться книгами!Но я думаю, ваша программа - упражнение.

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