Активный view vs Пассивный view

skwee

Новичок
Так и есть.
Вот пример:
Извини не правильно тебя понял. Я думал ты имел введу чтото вроде
PHP:
//controller
$this->view->user_link = $user->permalink();

//view
<a href="<?=$this->user_link?>"></a>
Нашел на тролятнике статью http://habrahabr.ru/blogs/php/134421/ , где была ссылка на http://phpti.com/ - PHP-шаблонизатор с блоками в 300 строк.
Вот он! Золотой Граал! Спасибо!
 

baev

‹°°¬•
Команда форума
Тут в теме уже столько модераторов отметилось: почему это в «теории программирования»?
Вы (модераторы) реально считаете, что это — «теория»? (Или просто не заметили?)
 

skwee

Новичок
baev
Извини но чем это не теория?

флоппик
Это не холивар. Я спросил конкретные вопросы, и не где не говорил что А лучше Б, я же не виноват что кто то превратил это в холивар. Я действительно хочу знать что есть Пассивный вью а что Активный, или как минимум ссылки на материал\книги.

Если сделал что то неправильно то простите :(
 

baev

‹°°¬•
Команда форума
baev
Извини но чем это не теория?
— не извиню.
И то и другое (вынесенные в заголовок темы) — это шаблоны.
А что такое «шаблоны»?

http://ru.wikipedia.org/wiki/%D8%E0%E1%EB%EE%ED <— даже отсюда ясно, что «шаблон», прежде всего, это — обобщение практики, реализованное в инструменте. Теоретизирование о том, какой инструмент лучше применять «вообще» — по-моему, это не «теория программирования».

Тему переношу в «оффтоп».
 

fixxxer

К.О.
Партнер клуба
В книге активным шаблоном назвали шаблон с логикой отображения, а не просто нарезку непонятных кусков, которые потом сшиваются в контроллере(который вовсе не контроллер, а каша из контроллера и вида)
Угадаю-ка, фамилия автора книги начинается на букву К? ;)

Терминологию, пришедшую из десктоп-паттернов, в вебе извратили до невозможности массой интерпретаций. Читайте оригиналы (т.е., старые книги по паттернам десктоп-приложений)
 

Absinthe

жожо
даже отсюда ясно, что «шаблон», прежде всего, это — обобщение практики, реализованное в инструменте.
Шутишь.

Теоретизирование о том, какой инструмент лучше применять «вообще» — по-моему, это не «теория программирования».
Согласен. Но в этой теме об инструментах начал говорить только ты в последнем сообщении.

Угадаю-ка, фамилия автора книги начинается на букву К?
Мне показалось, что Шлосснейгл, сейчас глянул - вроде не он. А всяких К. я не читаю.
 

Духовность™

Продвинутый новичок
Ragazzo
сейчас под рукой нет кода, но типичный вывод блока последних 10 новостей, 5 последних видео, делаю так.
PHP:
<?php
$oNews = new Model_News();
$oNews->findLast(10);
?>
<ul>
<?php foreach($oNews AS $news) { ?>
     <li><?=$this->escape($news['title'])?></li>
<?php } ?>
</ul>
В экшине тяну основную центральную часть, если нужно. А доп. блоки по возможности так как описал выше. Хотя, может быть и полностью пустой экшин, а данные тянутся в шаблоне.
Завтра сброшу пример.
в чем тут активность шаблона? чем это отличается от типичной схемы - получения инстанса модели в контроллере и отдачи во view результата работы findLast()?
 

iceman

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

так что забейте вы на свои шаблоны, на свои роутеры-хуейотеры, тратьте время не реализацию логики, а не заботьтесь о долбанном отображение.
 

Krishna

Продался Java
Когда блин уже поймут люди, что шаблон это НЕ есть эквивалент понятию view.
MVC - это _объектно-ориентированный_ паттерн, разделяющий ответственности между классами кода,
а шаблоны - это механизм отделения кода от представления.

MVC может быть запросто реализован без шаблонов, а использование шаблонов совершенно не гарантирует архитектуру отвечающую MVC.
Так что не надо путать тёплое с мягким, для начала.
К примеру, самый простой путь похерить активными шаблонами MVC - дёргать из шаблона параметры запроса.

Что касается правильного сочетания MVC с шаблонами, то в моём понимании идеальный вариант, это когда есть отдельный View объект, агрегирующий в себе объект шаблона (если тот представлен объектом, например смарти) и содержащий в себе логику отображения, а так же ограничивающий для шаблона область видимости некоторым своим контекстом.

Этот объект умеет дёргать модель и передавать в шаблон (пассивный, без кода вообще, только с тегами условий, циклов и обращения к переменным контекста шаблона) данные. Вот такую модель сложно испортить чем-то, имхо.
 

Ragazzo

TDD interested
Krishna
Болтовня ничего не стоит. Покажите мне код.- Linus Torvalds м?
 

С.

Продвинутый новичок
К примеру, самый простой путь похерить активными шаблонами MVC - дёргать из шаблона параметры запроса
Если параметр влияет только на вью, то почему бы и нет? Я не готов прописывать какой-нибудь мелкий незначительный параметр в трех-пяти местах, чтобы соблюсти канон. А иначе бюрократия получается, а не программирование.

Лично я имею четкое кредо, которое стоит по важности даже выше MVC. Любой кусок информации должен быть прописан только один раз в одном месте. Напримр если есть некое множество полей формы или базы, то этот список должен быть прописан в том или ином виде только один раз. Если я увижу этот список скажем во вью, а потом еще раз в модели, то я горло перегрызу, не то что MVC нарушу. Благо активные шаблоны позволяют прекрасно балансировать, без жертв и с MVC.
 
  • Like
Реакции: A1x

skwee

Новичок
Оффтопик так оффтопик...

в чем тут активность шаблона? чем это отличается от типичной схемы - получения инстанса модели в контроллере и отдачи во view результата работы findLast()?
В том что данный код представления сам решает какие данные ему нужны и как их разместить на странице, в отличии от пассивного который только размещает данные которые ему скормили.

...

Что касается правильного сочетания MVC с шаблонами, то в моём понимании идеальный вариант, это когда есть отдельный View объект, агрегирующий в себе объект шаблона (если тот представлен объектом, например смарти) и содержащий в себе логику отображения, а так же ограничивающий для шаблона область видимости некоторым своим контекстом.

Этот объект умеет дёргать модель и передавать в шаблон (пассивный, без кода вообще, только с тегами условий, циклов и обращения к переменным контекста шаблона) данные. Вот такую модель сложно испортить чем-то, имхо.
Скажи мне
PHP:
class Foo {
  public function bar() {
    $this->smarty->cart = UserModel::getShoppingCart();
  }
}
это что по твоему пониманию: вью или контроллер?
Если сматри это шаблонизатор а вью
Это объект который умеет дёргать модель и передавать в шаблон (пассивный, без кода вообще, только с тегами условий, циклов и обращения к переменным контекста шаблона) данные.
то мой Foo это вью, а у 99% людей\фрейморков это контроллер.

Твое определение правильное теоретически и описывает некий мвц в вакууме. Как сказал Ragazzo
Krishna
Покажите мне код.
Edit

Да кстати, ша вспомнил что одна из моих первых реализаций была именно такой (только терминология была не правильная, то что называется шаблонизатор - у меня называлось вью, а то что вью - называлось ContentProxy). Но в такой системе простые контроллеры выглядели так
PHP:
class Home extends Controller {
  public function index() {
    echo View::factory('Home')->render();
  }
}

class Auth extends Controller {
  public function login() {
    $errors = array();
    $v = Validation::factory('LoginForm');
    if(!$v->isValid($this->request->post())) {
      $errors = $v->getErrors();
    }
    echo View::factory('Login', $errors);
  }
}
И зачем тогда нужны контроллеры? Это тупо не нужный слой, думаю поэтому 99% фреймворков и объединяют то что ты называешь вью и шаблонизатор в один объект - Вью и в контроллере делают
PHP:
class Auth extends Controller {
  public function login() {
    $view = View::factory('Login');
    //validate form
    $view->form_errors = $errors;
    //more $view->something = something
    echo $view->render();
  }
}
 

fixxxer

К.О.
Партнер клуба
Фишка в том, что на самом деле контроллер - это то, что в веб-фреймворках именуют front controller.
А то, что именуют контроллером - это как правило выполняет функции View. :)
 

Absinthe

жожо
а у 99% людей\фрейморков это контроллер.
В том же самом django это назыается видом.

Фишка в том, что на самом деле контроллер - это то, что в веб-фреймворках именуют front controller.
А то, что именуют контроллером - это как правило выполняет функции View.
Почему, кто знает? Почему аналогичная сущность зовется либо видом, либо контроллером в зависимости от фреймворка, даже если эти фреймворки имеют идентичную архитектуру?
 

Krishna

Продался Java
Фишка в том, что на самом деле контроллер - это то, что в веб-фреймворках именуют front controller.
А то, что именуют контроллером - это как правило выполняет функции View. :)
Да ну нафиг. Просто часто контроллер вырожденный, всё что он делает - передаёт управление view.
Наиболее очевиден функцонал контроллера при обработке ввода сложных форм.

Например, форма поиска по интернет магазину, со строкой ввода текста и селектором "Искать в:" и выбором "статьи/новости/товары".
Вот обработка этого селектора - 100%ный функционал контроллера, который уже дальше передаст управление соответствующему классу модели.
 

skwee

Новичок
Krishna
мм. Покажи код (если можешь) пожалуйста. Уж очень интересно посмотреть на контроллер и вью.
 

fixxxer

К.О.
Партнер клуба
Krishna
Я умышленно утрировал: в таком виде, если не рассматривать случаи типа "обработка форм", формулировка наиболее близка к классическому GUI MVC.

Ну и даже с формой вопрос - я склоняюсь, что в той же классической терминологии это не контроллер уже, а вызов команды (Command pattern); контроллер - это то, что решило, какую команду вызывать.
 
Сверху