Должен ли я создать Model & DAO для этого в моем веб-приложении Java? - PullRequest
1 голос
/ 09 сентября 2010

У меня есть следующий сервлет действия, и мне было интересно, должен ли я создать модель с именем supervisor и соответствующий supervisorDAO, как я это сделал для программы? ProgramDAO помещает несколько компонентов модели программ в возвращаемый массив. Для супервизоров я использую общую утилиту базы данных ввода / вывода для получения массива хэш-карт (retALM) для всех передаваемых в строке SQL. Список супервизоров используется для создания раскрывающегося списка в HTML-форме.

У меня проблема с сохранением строки sql в сервлете действий. Я не уверен, что стоит создавать модель супервизора и DAO, если у меня есть модель User и класс UserDAO. На самом деле после ввода этого поста, я считаю, что это не правильный подход. Таким образом, можно либо оставить все так, как указано ниже, либо добавить SQL-вызов supervisor, чтобы получить список супервизоров в классе UserDAO, поскольку пользователь может быть супервизором. Я также приветствую другие критические замечания в отношении моего подхода к сервлетам действий.

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, 
    IOException {
    ProgramDAO prgDAO = new ProgramDAO();
    STKUser authenticatedUser = (STKUser) request.getSession().getAttribute("STKUserSession");
    List programs = null;
    List supervisors = null;

    try {
        programs = prgDAO.getProgramList(authenticatedUser);
    } catch (DAOException e) {
        request.setAttribute("message", e);
    }

    String strSQL = "SELECT DISTINCT phonebook.badge, phonebook.lname, phonebook.fname FROM phonebook 
        WHERE phonebook.badge IN (SELECT DISTINCT phonebook.ata_badge FROM phonebook WHERE 
        phonebook.dept='" + authenticatedUser.getDepartment() + "') ORDER BY lname";
    supervisors = General_IO.retALM(strSQL);

    request.setAttribute("supervisors", supervisors);
    request.setAttribute("programs", programs);
    RequestDispatcher view = request.getRequestDispatcher("views/commitment_template.jsp");
    view.forward(request, response);
}   

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Предлагаю прочитать мотивы для шаблона DAO . Короче говоря, он используется для абстрагирования доступа к вашим данным. При правильном использовании ваш сервлет не должен включать SQL.

Я также предлагаю использовать постоянный API, такой как JPA или JDO, для доступа к вашим объектам. Создание собственного SQL для каждого типа доступа к данным утомительно, подвержено ошибкам и часто неэффективно.

Отдельно от того, как вы извлекаете свои данные, стоит вопрос о том, как вы моделируете свои данные. Поскольку руководитель - это пользователь, предположительно со всеми атрибутами пользователя (имя, идентификатор сотрудника, руководитель), вероятно, имеет смысл хранить эти атрибуты в той же таблице, в которой хранятся пользовательские данные.

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

Если ваши супервизоры являются пользователями, и у вас есть UserDAO, то, возможно, ваш UserDAO должен иметь метод getSupervisors () или, возможно, метод getSupervisors (String dept).

Никогда, никогда, никогда не создавайте SQL с помощьюконкатенация строк, просто запросить http://en.wikipedia.org/wiki/SQL_injection

...