Шаблон MVC (нужен просмотр объекта в модели) - PullRequest
0 голосов
/ 04 ноября 2011

Я использую шаблон MVC в своем приложении.

Теперь мне нужен объект вида в модели.

Я не хочу добавлять представление в качестве параметра для моей функции в модели (поскольку она мне нужна и в других функциях). И я не хочу продолжать это передавать.

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

Есть ли другой способ? Разве мне не нужен объект вида в модели?

Какой предпочтительный способ сделать это?

Пример:

Контроллер

function someAction()
{
    $somemodel->add();
}

Модель

class SomeModel()
{
    function add()
    {
        if ($view->user) {
            // do stuff
            $this->mail();
        } else {
            // do other stuff
        }
    }

    function mail()
    {
        Mailer::send($view->user->email, $this->getitems(), $view->layout);
    }

    function getitems()
    {
        return Items::getitems($view->user);
    }
}

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Если вы действительно делаете MVC, то вам не нужно представление в модели, потому что только контроллер должен иметь доступ к представлению.

Глядя на предоставленный вами код, я могу сказать одно: метод add() не должен ссылаться на $view в любом случае (даже для доступа к его свойствам). Вместо этого модель должна быть снабжена значением $view->user от контроллера. То же самое касается метода mail().

Подумайте над решением этих проблем. В противном случае вы попадаете во что-то худшее позже.

1 голос
/ 04 ноября 2011

Контроллер - это место, где вы «запекаете» все, что готовится к визуализации. Под выпечкой я подразумеваю, что вы учитываете любые переданные в $ _REQUEST параметры, выполняете вызовы API модели, чтобы получить необходимые данные, и задаете переменные шаблона для визуализации. Ваше действие в конце этого процесса должно сделать вызов шаблона (представления), который вы выбираете, чтобы отобразить «запеченные» переменные шаблона.

1 голос
/ 04 ноября 2011

Модель должна быть отделена от вида.Итак, как сказал mkArtak, контроллер должен быть единственным, что связывается с представлением.Который затем передает только необходимую информацию для модели.

Что касается модели, то она должна иметь дело только с информацией, которую она понимает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...