MVC на phppatterns.com

Духовность™

Продвинутый новичок
ну да, ну да.. ну все равно как-то мне непонятно это все.

1. код разрастается, тяжело поддерживать

2. все действия происходят в конструкторах, по сути конструктор - один единственный метод view и контроллера.

т.е. какой-то реальной пользы я пока не вижу в МВС. наверно, я что-то не так делаю.
 

whirlwind

TDD infected, paranoid
triumvirat а покажи 66 строк. Ты вообще чего хочешь добиться с помощью MVC?
 

whirlwind

TDD infected, paranoid
Ну давай попробуем разобраться. Предлагаю разобрать другой пример. Попробуй реализовать модель юзера. Контроллеры сами так и просятся: регистрация, редактирование, просмотр информации, краткая инфа в топике форума и т.п. и т.д. выбирай два на свое усмотрение ;)
 

Духовность™

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

Полный код: http://phpclub.ru/paste/index.php?show=2196

Интерфкйс:
PHP:
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() {}
}
такая модель подойдет? Если да, то я попытаюсь продолжить.
 

whirlwind

TDD infected, paranoid
Давай добавим ему магические __set/__get, что бы можно было записать например так

$user->city = 'Tyumen';
echo $user->city;
 

Духовность™

Продвинутый новичок
HraKK
Это класс "пользователь" для работы с пользователем. А что не так?

whirlwind
ок.

PHP:
public function __set($key, $value)
{
    $this->data[$key] = $value;
}

public function __get($key)
{
    return isset($this->data[$key]) ? $this->data[$key] : null
}
А что на меня HraKK наезжает? )
 

Духовность™

Продвинутый новичок
так тут идеологии ещё никакой нет. это просто класс для работы с пользователем.
 

whirlwind

TDD infected, paranoid
Вот, теперь это похоже на модель: есть свойства-атрибуты и поведение-методы. А то как то трудно сгибать пальцы, если пальцев то и нету ;)

Теперь нужно дать ответ стороннему наблюдателю - какие атрибуты есть у этой модели? Сейчас это будет все что угодно. Если я напишу

PHP:
$user->chassis = TRACK;
то это сработает, хотя на самом деле никаких шасси у юзера нет.

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

HraKK на самом деле это вообще Data Mapper ;)
 

whirlwind

TDD infected, paranoid
совсем не типо. если я сделаю
PHP:
$user->chassis = TRACK;
foreach ( $user->getAttributes() as $attr => $val ){
     echo "$attr = $val\n";
}
Что будет? А если я хочу создать новый объект - как мне узнать какие атрибуты устанавливать? Надо обеспечить не согласительную, а декларативную форму описания атрибутов модели.
 

whirlwind

TDD infected, paranoid
Я имел в виду, что при текущем положении вещей я могу по своему желанию добавить любой атрибут в модель. И она это спокойно проглотит, потому что у тебя модель описана соглашением, что юзер содержит такие-то атрибуты. А должно быть требование - у юзера есть _только_ эти атрибуты и никакие другие. Чем больше в классах соглашений, тем хуже. Класс умеет требовать, но он не может работать по соглашению с человескими мыслями потому что mod_telepat для кода еще не изобрели ;)

-~{}~ 01.11.08 17:40:

triumvirat мож закончим, раз уж начали разбираться? ;) а то скора пора уже вотка пить, земля валяцца.
 

CatManZero

Новичок
Автор оригинала: whirlwind
HraKK на самом деле это вообще Data Mapper ;)
Это может быть и DataMapper. Но разве здесь он не играет роль модели с точки зрения MVC? Ведь этот класс содержит не только методы доступа к данным, но и элементы бизнес логики.
 
Сверху