6 задание по курсу "Информатика и программирование" на весенний семестр 2013-2014 года
DB
В 5 задании вы реализовали DB класс, выполняющий 5 методов, работающих с базой данных напрямую. Ставится задача абстрагировать ее от непосредственного взаимодействия с БД, добавив посредника - PDO:
- В конструктор DB передаем полностью сконфигурированные экземпляр PDO
- Удаляем метод execQuery
- Все остальные методы переписываем так, чтобы непосредственные запросы к БД производились в PDO
Entity
Класс нашей сущности. Под сущность подразумевается контейнер данных для 1 строчки из БД. Например, если мы рассматриваем таблицу со студентами. То 1 строчка из такой таблицы - студент. И если мы обернем все данные этой строчки в некоторый класс, то получим класс сущности "Студент".
Предположим, в таблице стдентов 4 поля: ID, fio, gender, group
У нас есть 1 строка из этой таблицы. Например, в ассоциативном массиве:
У нас есть 1 строка из этой таблицы. Например, в ассоциативном массиве:
$data = array('ID' => 1, 'fio' => 'Test test test', 'gender' => 1, 'group' => '246');Создаем класс Student, в конструктор которого передаем данные из этой строки:
function __construct($id, $fio, $gender, $group) {}Так же в этом классе объявляем приватные свойства для каждого поля соответственно. И присваиваем значения аргументов конструктора этим полям:
...
$student = new Student($data['ID'], $data['fio'],...); // Создание экземпляра выглядит так
private $ID;Так же для каждого приватного свойства должен быть описан свой метод "геттер", именованный, как getFileldName, например, дляч fio - это getFio(). Каждый такой метод просто возвращает значение соответствуюещго поля.
private $fio;
...
function __construct($id, $fio, $gender, $group) {
$this->ID = $id;
$this->fio = $fio;
...
}
Provider
Класс-поставщик сущностей. Провайдер в качестве аргумента конструктора принимает экземпляр DB класса.
Имеет три метода:
Имеет три метода:
- getEntities();
- getEntity($number)
- saveEntity(Entity $entity)
Каждый из этих метов внутри себя вызывает похожий метод у DB класса. Но. В случае с get-методами, результат представляет из себя не просто строку (или массив строк) из БД, а класс сущности (или список сущностей)
Так, метод getEntities вернет массив, каждый эелемент которго - это экземпляр класса Entity с переданными в него данными из полученной строки БД.
Так, метод getEntities вернет массив, каждый эелемент которго - это экземпляр класса Entity с переданными в него данными из полученной строки БД.
А в случае с saveEntity, внутри метода будет сформирован массив, который будет передан в метод DB setData.
Тестирование
Необходимо покрыть unit-тестами классы Provider и DB. Причем, для провайдера предусмотреть два тестовых класса: в одном DB класс представлен стабовым классом, в другом - через mock.
DB класс тестируется 1 тестовым классом, в котором строится mock для PDO.
Примечание
Имена классов Entity и Provider - даны для примера. В вашем случае они будут иметь конкретные имена. Например, Student и StudentsProvider.
Комментариев нет:
Отправить комментарий