Духовность™
Продвинутый новичок
whirlwind
да, пока закончим )
я уже сам неодупляюсь
да, пока закончим )
я уже сам неодупляюсь
Вот как раз та часть которая из датамаппера абсолютна в MVC не нужна. Пользователю модели должно быть вообще наплевать где оно хранится да и хранится ли оно вообще где нибудь. Все что нужно знать - это интерфейс. Есть метод getAttributes? Круто - мы можем написать единый контроллер для отображения объекта любого класса модели. Есть метод save? Замечательно, это позволит формализовать действие редактирования всех объектов класса модели в одном контроллере. И т.п. Сокращение кода будет именно здесь, а не в том что в одном отдельном контроллере по сравнению с портянкой будет меньше кода (хотя так и будет в итоге).Автор оригинала: CatManZero
Это может быть и DataMapper. Но разве здесь он не играет роль модели с точки зрения MVC? Ведь этот класс содержит не только методы доступа к данным, но и элементы бизнес логики.
Наверное не нужна, особенно, если внутренне представление модели сильно отличается от того, как хранятся её данные в БД и т.п. Тут класс больше на active record чтоли смахивает...Автор оригинала: whirlwind
Вот как раз та часть которая из датамаппера абсолютна в MVC не нужна.
так что, я не пойму - надо сделать проверку на недопустимость добавления в класс иных свойств?Я имел в виду, что при текущем положении вещей я могу по своему желанию добавить любой атрибут в модель. И она это спокойно проглотит, потому что у тебя модель описана соглашением, что юзер содержит такие-то атрибуты. А должно быть требование - у юзера есть _только_ эти атрибуты и никакие другие. Чем больше в классах соглашений, тем хуже. Класс умеет требовать, но он не может работать по соглашению с человескими мыслями потому что mod_telepat для кода еще не изобрели
class model
{
private $model_attributes = array();
private $data;
public function __construct()
{
$this->model_attributes = array('user_name', 'user_age', 'user_sex');
}
public function __set($key, $value)
{
if (in_array($key, $this->model_attributes))
{
$this->data[$key] = $value;
}
}
public function __get($key)
{
return isset($this->data[$key]) ? $this->data[$key] : null;
}
public function getAttributes()
{
return $this->data;
}
}
$model = new model();
$model->user_name = 'Вася';
$model->user_age = 15;
$model->user_sex = 'male';
$model->hobot = TRUE; // йух - нет такого свойства
print_r($model);
а там ничего кроме тинтерфейса быдломодели не былопримеры свои верни
Интерфкйс:
class user
{
// Принимает массив данных вида
// 'id_user' => 12
// 'user_name' = 'вася'
// .....
public function __construct($data) {}
// возвращает объект user по числовому идентификатору.
public static function getObjectById($id_user) {}
/**
* Возвращает TRUE, если пользователь является админом.
* В контексте объекта user всегда возвращает FALSE.
*/
public function isAdmin() {}
// ....
/**
* Обновляем данные пользователя.
*/
public function update($data) {}
/*
* Удаление пользователя.
*/
public function delete() {}
/**
* Устанавливает "активность" пользователя.
* Применяется при подтверждении регистрации,
* а также при банах.
*/
public function setActive($active) {}
/*
* Когда зарегестрированный пользователь вхожит в систему,
* обновляем его данные - время посещения и IP.
*/
public function setActualInfo() {}
}
ничего толком не было. ты написалЧто там было у тебя с MVC тоже давай
вот. Модель юзера мы наверно реализовали? Абстрактную такую. Теперь надо контроллер мне написать. Так?Попробуй реализовать модель юзера. Контроллеры сами так и просятся: регистрация, редактирование, просмотр информации, краткая инфа в топике форума и т.п. и т.д. выбирай два на свое усмотрение
Тогда почему он getObjectById должен называться? Т.е надо сделать метод, который будет брать данные из БД с указанным id?Нужно этот же объект настроить на запись с указанным ID.
function getObjectById($id)
{
if ($data == null)
{
$res = $db->query('SELECT * FROM users WHERE id_user = ?', $id);
$data = $res->fetch_assoc();
}
return $data;
}
class user_model
{
private $model_attributes = array();
private $data;
public function __construct()
{
$this->model_attributes = array('user_name', 'user_age', 'user_sex');
}
public function __set($key, $value)
{
if (in_array($key, $this->model_attributes))
{
$this->data[$key] = $value;
}
}
public function __get($key)
{
return isset($this->data[$key]) ? $this->data[$key] : null;
}
public function getAttributes()
{
return $this->data;
}
function getObjectById($id)
{
if ($data == null)
{
$res = $db->query('SELECT '.implode(', ', $this->model_attributes).' * FROM users WHERE id_user = ?', $id);
$data = $res->fetch_assoc();
}
return $data;
}
}
$model = new user_model();
$model->user_name = 'Вася';
$model->user_age = 15;
$model->user_sex = 'male';
$model->hobot = TRUE; // йух - нет такого свойства
// тут получим данные пользователя $id,
// определенные в $this->model_attributes
$data = $model->getObjectById($id);
print_r($model);