Как бы Вы написали такой код?

Духовность™

Продвинутый новичок
Как бы Вы написали такой код?

Есть класс пользователь.
PHP:
class user
{
    public function __construct($id_user)
    {
        $this->data = $db->query('SELECT * FROM users WHERE id_user = '.$id_user);
    }
}
Нужно вывести список пользователей. Имеем 2 варианта:

1. Структурный, простой, 1 запрос

PHP:
$users = $db->query('SELECT * FROM users ...')->fetch_assoc();

foreach($users as $user)
{
    echo '<tr><td>'.$user['name'].'</td></tr>';
}
2. ОО-подход, 1 + N-юзеров запросов:

PHP:
$res = $db->query('SELECT id_user FROM users ...');

while($id_user = $res->getOne())
{
    $users[] = new User($id_user);
}

foreach($users as $user)
{
    echo '<tr><td>'.$user->getByName('name').'</td></tr>';
}
что тут правильно как идеологически, так и практически?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
М. _ИМХО_, идеологически верно для работы со списком пользователей, сделать класс UserList ?

-~{}~ 27.08.08 15:02:

Который будет иметь метод getUser() возвращающий обьект типа User ?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Класс надо писать на одну сущность. Список пользователей вполне подходит под это описание )
 

Духовность™

Продвинутый новичок
флоппик
а контроллеры обычно тоже пишут под каждый action?

вот у меня есть 3 действия:
- список пользователей
- редактирование пользователей
- удаление пользователей

модель "пользователь" одна, а контроллер надо делать под каждое действие, так?

или твой класс в данном случае будет моделью для контроллера "список пользователей"?
 

Gas

может по одной?
triumvirat
в контроллере может использоваться несколько моделей, нет жёсткой привязки "один контроллер = одна модель".

модель "пользователь" одна, а контроллер надо делать под каждое действие, так?
не нужны отдельные контроллеры тут, сделай разные actions.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
или твой класс в данном случае будет моделью для контроллера "список пользователей"?
Да.

У тебя есть действия:
- список пользователей
- редактирование пользователя
- удаление пользователя

и, да:
в контроллере может использоваться несколько моделей
ЗЫ. Как то мы странно с ООП на MVC перескочили.
 

Духовность™

Продвинутый новичок
не нужны отдельные контроллеры тут, сделай разные actions.
и как это может выглядеть? у меня сейчас один контроллер приходится для одного действия. а каждое действие - в отдельном подключаемом файле.
 

Gas

может по одной?
и как это может выглядеть
например, контроллер - класс, action - метод.

triumvirat
mvc патерн не описывает доскональной реализации и каждый делае как хочет, но посмотри лучше как сделано у других, хоть в zend framework.
 

akxxiv

Новичок
У меня модель поддерживает и список объектов. в зависимости от запроса. Например:

Объект пользователя:
PHP:
$obj = new Users($id); $obj->getName ......
или
PHP:
$obj = new Users;  $obj->findById($id)->getName ......
или

PHP:
$obj = new Users;  $obj->setWhere("AND id=?d", $id)->findRow()->getName.....
Список пользователей:

PHP:
$users = new Users; 
$list = $users->setWhere(...)->find()->getObjectList();

foreach($list as $obj)
{
     $obj->getName ......
}
 

HraKK

Мудак
Команда форума
мне его и так с лихвой хватило в моей жизни
Йопть да у тебя код такой же гавнокод как и в битриксе и тд.
Лучше не занимайся херней, а юзай ZF
 

флоппик

promotor fidei
Команда форума
Партнер клуба
HraKK, ты чего?
Чем плохо учиться и развиваться?
Имхо, _иногда_ лучше свой говнокод, который становится лучше, чем чужой код, который бездумно используется...
 
Сверху