[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC. Как реализовать? Контроллер должен быть потом
seine
Привет всем, никак не могу понять, как реализовывается паттерн MVC с использованием ООП?
У меня есть модель. Представим какой-то класс, у которого есть два метода (можно представить и больше, у кого как фантазия работает :-) Метод "добавить запись в бд" и метод "прочитать какую-либо запись из бд".


class model {
public function add() {...}
public function fread() {...}
}


Методы add и read самый нижний уровень, который взаимодействует непосредственно с бд.
Теперь вопрос по контроллеру, он должен быть потомком модели или нет? Если нет, тогда как использовать методы модели? Как статичные? Мне кажется это не лучший вариант?
А если контроллер - потомок модели, то что делать если я хочу назвать методы потомка так же как и у предка ( т.е. add() и read() ), то мне потом надо будет вызывать родительские методы как parent::add и parent::read, так выходит?
Ну, то есть главный вопрос моего послания: контроллер - потомок ли модели?
Oyeme
Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя свое состояние.

Представление (View). Отвечает за отображение информации (пользовательский интерфейс).

Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.

Нет контолеер сам по себе.
Kонтолеер токо распределяет,модуль выполняет.

ОТВЕТ - контроллер не потомок модели smile.gif

user posted image
seine
Цитата
ОТВЕТ - контроллер не потомок модели


Ок, с этим разобрались. А каким образом модель и контроллер взаимодействуют? Т.е. у модели статичные методы к которым обращается контроллер?
Можно еще сделать у контроллера свойстово

private $model;


А в конструкторе контроллера вызывать конструктро модели. Получится, что контроллер имет свою собственную маленькую модель)
Вот два способа, которые я вижу. Я прав? Или не такими способами контроллер обращается к модели?

P.S. На счет картинки. Пока учил, что такое MVC, натолкунлся на одну неопределенность. В половине истоничков утверждается, что "модель" не может взаимодействовать с "отображением", а в половине других - что, может. На картинке как раз и есть взаимодействие между "моделью" и "отображением".
Как я понял это чуть ли ни холиварный вопрос.
Имхо, "модель" и "вид" не должны взаимодействовать напрямую, а только посредством контроллера.

P.P.S. А, кстати, вот
Цитата
Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя свое состояние.

У того же Котерова совсем другое определение. У него view напрямую не связана с моделью.
Вот и поди разберись, что к чему :-)
vasa_c
Модель и контроллер взаимодействуют так же, как гантель и мотороллер, или как любые другие два объекта в программе.

_____________
Блог ГО | Таблица символов Юникода | Графомания
seine
Угу. Кажется я сильно торможу, но можно какой-нибудь пример.
Просто я никогда не программировал ОО, никак не могу привыкнуть. :-)
Oyeme
пример Zend Framework wink.gif
http://zendframework.ru/
vasa_c
Class Controller {
public function method() {
$model = new Model();
$model->modelMethod();
}
}


_____________
Блог ГО | Таблица символов Юникода | Графомания
seine
Так, я рискну дополнить код выше


Class Controller {
public function method() {
$model = new Model();
$model->modelMethod();

// Тут что-то делаю, например, с полученными данными

// А потом уничтожаю

unset($model);
}
}




Меня никак не отпускает мысль про статичные методы, не лучше было бы сделать так:

class model {
static public function modelmethod() { }
}



class object {
public function method() {
model::modelmethod();
}
}



Или сделать модель свойством контроллера:




class model {
public function modelmethod() { }
}



class object {
private $model;

public function __construct() {
$this->model = new model();
}

public function method() {
$this->model->modelmethod();
}

public function __destruct() {
unset($this->model);
}
}


vasa_c
Если бы был чёткий ответ на каждый абстрактный вопрос "а не лучше бы?" программирование не было бы таким интересным и программистам не платили нормальные деньги.

А интересное оно потому, что в каждом случае нужно думать отдельно, а не лучше бы статические методы, а не лучше бы сделать полем. Можно и так и так.

Можно вообще не делать отдельных классов Model, Controller, просто понимать нужно, где модель, а где контроллер. А так же нужно ли вообще в данном случае их чёткое разделение.

_____________
Блог ГО | Таблица символов Юникода | Графомания
seine
vasa_c, ок, спасибо, чувак, ты меня просветил.
Ну я просто думал, может есть какой-то серьезный аргумент за то, чтоб использовать как в примере, а раз это творческий процесс, то так даже лучше))
b00tanik
Кто-то говорит, что статические методы работают быстрее.

Но не стоит ими увлекаться, так как метод проекитрования на статических функциях может превратить классы в простые хранилища методов, сведя всю прелесть ООП на нет.
twin
biggrin.gif biggrin.gif
Еще один. Милости прошу на диспут.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Dezigo
Делать контроллер как представитель модели своей. Идея есть.Главное понимать,и разделять это.
Если интересует подход ООП полностью раскрыт в c#. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.