Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача экземпляра класса в Smarty, логика и представление 
:(
    Опции темы
razerxxx
Дата 25.3.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Возникли тут разногласия с коллегой. 
Ситуация такая. Имеется класс комментариев. У класса есть метод fillTemplate($object_id) - который отдает готовый скомпилированный шаблон(список комментариев плюс форма добавления и пагинация).
Я вызываю его так: в контроллере в шаблон передаю экземпляр класса 
Код

$output['comments']= new Comments();

в шаблоне вызываю 

Код

{$comments->fillTemplate($object_id)} 

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

Код

{$object.title}
{$object.description}
...
{$object.comments} //используется _toString();

- то есть данные уже полученны на строне модели примерно так:

Код

$object['comments'] = new Comments($object['id']);

В моем случае, как я считаю, структура получается более гибкой, модель объекта ничего не знает о комментариях, комментариями полностью занимается отдельный класс. Минус же подхода, в том что проникает логика в представление, в чем собственно у нас и спор.
Подобный подход, как я понял используется в LiveStreet - занимался версткой шаблона для него, и там это увидел. Мне показалось это довольно удобным. При верстке не надо лезть в php если нужно получить например картинку пользователя. Там это было примерно так $user->getUserAvatar(100);
Кто что думает по этому поводу...
PM MAIL   Вверх
Nigel
Дата 25.3.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



А теперь представьте, что Вам сказали изменить шаблон либо отдавать данные другого формата (xml, json). Что Вы будете делать? Полезете в темплейты и будете искать там строчки вида
$user->getUserAvatar(100); чтобы вставить их в новый файлик.
Нарушается принцип mvc, дело, конечно, сугубо личное, следовать ему или нет. Если все же придерживаетесь этого принципа, то тогда всю логику следует выносить в модель.
PM MAIL   Вверх
Muerto
Дата 25.3.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Можно делатькак угодно, но с точки зрения MVC

Правильней как вам сказали
Код

{$object.title}
{$object.description}
...
{$object.comments}



--------------------
user posted image
PM MAIL   Вверх
razerxxx
Дата 25.3.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Цитата(Nigel @ 25.3.2011,  16:21)
А теперь представьте, что Вам сказали изменить шаблон либо отдавать данные другого формата (xml, json). Что Вы будете делать? Полезете в темплейты и будете искать там строчки вида
$user->getUserAvatar(100); чтобы вставить их в новый файлик.
Нарушается принцип mvc, дело, конечно, сугубо личное, следовать ему или нет. Если все же придерживаетесь этого принципа, то тогда всю логику следует выносить в модель.

Как раз таки семинть шаблон тут будет даже легче...
В крайнем случае есть метод $comments->getComments($id) который как раз возвратит массив сообщений, и можно уже формировать шаблон как угодно....
А отдавать данные другого формата? хм.. не вижу проблемы, можно дописать метод getXmlData() -  и заменить на него..
PM MAIL   Вверх
Nigel
Дата 25.3.2011, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



Ну, попробуйте. Когда будет пара тысяч файлов, сообщите сколько времени заняло поменять одну функцию на другую.
PM MAIL   Вверх
razerxxx
Дата 26.3.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.3.2011

Репутация: нет
Всего: нет



Цитата(Nigel @ 25.3.2011,  22:12)
Ну, попробуйте. Когда будет пара тысяч файлов, сообщите сколько времени заняло поменять одну функцию на другую.

Не совсем понимаю что вы хотите сказать. Если будет несколько тысяч файлов, это не будет иметь значения - шаблон для комментов один, и он расположен в одном месте, изменить его в любом случае не составит проблемы. При чем от подхода это даже независит. Или может я не совсем понял что вы имели ввиду...
PM MAIL   Вверх
Nigel
Дата 28.3.2011, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



У вас ведь для каждой сущности свой метод рендеринга, который к тому же выполняет в нагрузку еще некую логику. Комментарии это ведь не единственное, что может быть на сайте, следовательно таких функций будет много. Когда же возникнет необходимость сменить шаблон, скажем, для мобильной версии, то придется написаться еще n функций по штуке на каждую сущность и поддерживать еще их. Причем код будет дублироваться. С изменением логики приложения столкнетесь с необходимостью рефакторинга всего этого добра.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.