2017-02-07 15 views
0

Я больше привык к процедурному программированию, и то, что я сделал, в основном работает, но когда я смотрю на него, я думаю, что он не может быть очень эффективным, и должен быть гораздо лучший способ сделать то же самое. Может ли кто-нибудь показать мне, что это такое? В корне этого можно загрузить различные виды из main.java и избавиться от них на основе содержимого базы данных.Загрузка различных представлений на Java в зависимости от переменных из базы данных?

Я создаю приложение базы данных с интерфейсом Java, используя JDBC. Я хочу иметь возможность загружать 3 разных графических интерфейса для 3-х разных пользователей, в зависимости от того, какой из них входит в систему. Мой первоначальный удар в этом заключается в создании класса Java-компонента для каждой таблицы в базе данных и соответствующих классов диспетчера для взаимодействия с базой данных. В конце концов я загружаю для них окно входа в систему, чтобы попытаться получить доступ к базе данных. Когда пользователь вводит правильные данные для входа, они сохраняются в классе Singleton с именем Session.java для справки, когда они используют программу, поэтому мне не нужно возвращаться в базу данных, чтобы проверить их информацию. Класс Singleton затем используется для определения соответствующего интерфейса для загрузки для них. Я делал это из Main.java так:

LoginScreen login = new LoginScreen(); 
JohnsView john = new JohnsView(); 
MarysView mary = new MarysView(); 
PaulsView paul = new PaulsView(); 
login.setVisible(true); 
login.setLocationRelativeTo(null); 

//while the user has not completed login hide their database interface screen 
while (!Session.isLoginSucessful()) { 
    john.setVisible(false); 
    mary.setVisible(false); 
    paul.setVisible(false); 
} 

, когда пользователь вводит свои данные для входа через графический интерфейс я проверить, если их имя пользователя и пароль совпадает с записью в базе данных. Если это не я установить переменные в классе Singleton под названием Session.java как это:

Session.setTheUserID(user.getIduser()); 
    Session.setTheUserName(user.getUserName()); 
    Session.setTheUserPassword(user.getPassword()); 
    Session.setTheUserLevel(user.getUserLevel()); 
    Session.setTheUserStaffID(user.getStaffID()); 
    Session.setLoginSucessful(true); 

затем обратно в main.java я использую переключатель заявление .dispose() из ненужных взглядов и сделать соответствующий один видно, как это:

//dispose of login once it's finished with  
    login.dispose(); 

    //get the user 'level (1,2 or 3) from the singleton class... 
    int usrLev = Session.getTheUserLevel(); 

    //check their level with the switch statement for the appropriate view to load 
    switch(usrLev) { 
     case 1: 
      john.setVisible(true); 
      mary.dispose(); 
      peter.dispose(); 
      break; 
     case 2: 
      mary.setVisible(true); 
      john.dispose(); 
      peter.dispose(); 
      break; 
     case 3: 
      peter.setVisible(true); 
      mary.dispose(); 
      peter.dispose(); 
      break; 
     default: 
      break; 
    } 

Я знаю, что я мог бы подойти к этой проблеме по-другому и поместить окно входа в большую Jframe и манипулировать содержимым Jframe на основе того, кто входит в систему. Я рассмотрел некоторые примеры этого в ответ на другие вопросы здесь, но это не достигло бы того, чего я хочу. Я хочу иметь возможность загружать разные представления из Main в зависимости от переменных, полученных из базы данных. Нужен ли мне какой-то класс менеджера представлений, который вызывается из основного? Я пробовал это несколько раз, но в конечном итоге удаляю его, потому что это не имеет смысла, когда я пытаюсь. Я не могу понять это в java. Любая помощь в понимании этого и ответа на него приветствуется.

ответ

0

OK. Я решил это. Хотя вместо того, чтобы удалять сообщение, я решил оставить его здесь для всех, кто больше привык к процедурному программированию, чем ООП.

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

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

Я оставлю это немного. если это не полезный вклад, я удалю его.