Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОФОРМЛЕНИЕ ДИПЛОМНЫХ И КУРСОВЫХ РАБОТ / Приложение В-1_Содержание и пример курсовой работы.doc
Скачиваний:
42
Добавлен:
19.02.2016
Размер:
1.87 Mб
Скачать

3.4. Классы-сущности

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

Классы, которые относятся к этому логическому слою, находятся в пакете by.knowledge.entities.

Каждая сущность относится к одной определённой записи в таблице базы данных, а полям таблицы соответствуют атрибуты класса. В то же время сущность выступает, как самостоятельный объект, и имеет методы, унаследованные от абстрактного класса AbstractEntity, которые отвечают за загрузку, сохранение, удаление соответствующей записи в таблице. В качестве примера приведём метод, устанавливающий значения полей некоторой сущности.

public boolean load(int id) throws EntityException {

boolean loaded = true;

this.id = id;

try {

DBConnection conn = new DBConnection();

String query = DBQueryHelper.selectQuery(getTableName(), new String[] { "*" }, getSelectCondition());

ResultSet rs = conn.executeQuery(query);

if (loaded = rs.first()) {

setValues(rs, 1);

}

conn.close();

return loaded;

}

catch (DBException e) {

throw new EntityException("Can't load entity", e);

}

catch (SQLException e) {

throw new EntityException("Can't load entity", e);

}

}

Вначале устанавливается соединения с базой данных. Затем формируется SQL-запрос. Для этого методу selectQuery передаются параметры getTableName() (имя таблицы), new String[] { "*" } (множество полей, которые необходимо выбрать, getSelectCondition() (условие отбора).

После проверки, не является ли пустым результат запроса к базе данных, вызывается метод setValues, который присваивает полям объекта полученные значения.

После завершения работы с базой данных соединение закрывается.

Таким образом, классы-сущности позволяют работать с данными на более высоком уровне, чем просто обращение к файлам на диске или к базе данных. Благодаря этому соблюдается принцип модульности: классы, которые работают с сущностями, «не знают» о том, что является источником данных, и каким образом эти данные загружаются.

В пакете by.knowledge.entities расположен также вспомогательный класс EntitiesManager. Он включает в себя часто используемые методы для работы с сущностями, например методы, которые возвращают список всех деятелей или лекториев.

3.5.Action-классы

Совокупность Action-классов представляет собой контроллер приложения. Эти классы находятся в пакете by.knowledge.actions. По своей функциональности action-классы, реализованные в данном приложении, делятся на добавляющие данные, удаляющие данные и другие.

Главный и обычно единственный метод в каждом action-классе – execute. Рассмотрим пример метода execute для класса AddDomainAction:

public class AddDomainAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {

AddDomainFormBean domainForm = (AddDomainFormBean) form;

DomainEntity domain = new DomainEntity();

domain.setName(domainForm.getName());

domain.setDescription(domainForm.getDescription());

domain.save();

return (mapping.findForward("success"));

}

}

Метод execute получает в качестве параметра объект класса AddDomainFormBean – форму с заполненными пользователем полями. Далее создаётся новый объект сущности DomainEntity и его поля инициализируются в соответствии со значениями формы. После этого объект domain сохраняется.