Как эффективно реализовать функциональность базы данных? - PullRequest
0 голосов
/ 19 января 2010

Я занимаюсь разработкой Java Desktop Application, которое использует базу данных MySQL. В БД 6 таблиц. Каждая таблица, как обычно, должна разрешать операции CRUD (создание, чтение, обновление и удаление).

Я разработал 6 * 4 = 24 JPanels, 4 JPanels для каждой таблицы. Каждый JPanel имеет Компоненты для ввода данных пользователем и выполнения операции CRUD, для которой он предназначен. Например, JPanel3 предназначен для операции Create для Table1.

Теперь я хочу знать следующее:

Q1. Было бы лучше написать 24 функции, каждая из которых выполняет определенную функцию для определенной таблицы?

Q2. Такая ситуация очень нормальная, поскольку в каждом приложении обычно много таблиц. Итак, все ли приложения используют этот подход написания каждой функции для каждой операции для каждой таблицы?

Q3. Поскольку это приложение Swing, и для каждой операции CRUD требуется подключение к базе данных, поэтому было бы лучше установить подключение к базе данных, когда пользователь запускает приложение?

или

Было бы лучше установить соединение с базой данных в тот момент, когда пользователь нажимает кнопку «Сохранить», «Редактировать», «Удалить» или «Создать»?

Q4. Было бы лучше сослаться на соединение из переменной экземпляра, которая используется всеми 24 функциями? или было бы лучше иметь каждую функцию своим собственным подключением?

Любые другие предложения также приветствуются.

Ответы [ 6 ]

4 голосов
/ 19 января 2010

См. эту статью о шаблоне DAO, а затем см. Не повторяйте DAO! артикула , чтобы вы могли создать универсальный многократно используемый DAO.

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

3 голосов
/ 19 января 2010

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

A2. Нет. В настоящее время большинство приложений используют объект / реляционный маппер, например Hibernate для таких вещей. Но все же, сверху должна быть логика приложения, которая выполняет связанные операции вместе.

A3 / 4. Использовать пул соединений с БД . O / R мапперы обычно делают это автоматически.

1 голос
/ 19 января 2010

Q1: Не могли бы вы иметь меньше JPanels и использовать JComboBox, чтобы позволить пользователю выбирать, с какой таблицей работать?Это, вероятно, сэкономит вам некоторый код.

Q2: В некотором смысле, да.Но посмотрите мой ответ для Q4.

Q3: Установите соединение, когда пользователь щелкает, и оставляйте его открытым столько короткого времени, сколько вам нужно.Соединения с базой данных требуют ресурсов.

В4: Было бы намного лучше, если бы вы выполняли весь код базы данных и взаимодействовали в одном классе, называемом Объектом доступа к данным, тогда гораздо проще изменить базу данных с MySQL, если выхотел бы.Смотри http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/

1 голос
/ 19 января 2010

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

Я полагаю, что проблем гораздо больше, чем те, которые вы описываете, и вы могли бы работать месяцами, чтобы найти вопросы ; -)

Есть так много предложений, которые могут вам понадобиться, что мы даже не можем начать.

Не могли бы вы рассмотреть такую ​​среду, как Hibernate? Хотя вам будет сложно учиться, в процессе (и рекомендациях) вы узнаете много нового о проблемах и решениях уровня базы данных.


Но чтобы ответить на некоторые ваши вопросы:

Q1: нет, написание 24 функций было бы большим дублированием.

Q2: конечно, нет.

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

Q4: для получения соединения должен использоваться общий код.

0 голосов
/ 08 сентября 2010

Было бы лучше, если вы не пишете код. Да! Просто перетащите. Проверка данных, отчеты и графики. Создайте полную программу базы данных без написания единой строки кода. Общие вещи, такие как новый / редактировать / удалять / искать / обновлять. Используйте JDeveloper.

0 голосов
/ 19 января 2010

Что делает приложение?

Надеюсь, вы используете больше описательных имен для своих объектов, чем "JPanel3" и "Table1"?

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