2009-05-05 4 views
1

Сегодня на работе кто-то пытался убедить меня в том, что:базы данных вызовов в Smarty/просмотров/шаблоны

{$obj->getTableInfo()} 

отлично подходит для Smarty/Mvc/шаблонам, потому что он использует метод объектов. Я утверждал, что, поскольку он делает вызов в базу данных, ему нет места там, и он должен находиться в контроллере (мы фактически не используем MVC). Я прав в своем понимании логических разделов, которые используются в MVC и вообще в шаблонах? Или есть что-то, что мне не хватает?

+0

Действительно ли честно, что я проголосую за те, которые поддерживают мой взгляд? Наверное, нет ... Я действительно хотел услышать от людей, которые думали, что все в порядке ... Ну хорошо – SeanJA

ответ

5

Вы правы. Он ошибается.

Вызов базы данных, независимо от того, в какой форме, должен жить в контроллере, если вы хотите сделать MVC справа.

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

1

Ну, нет «официальных» правил или чего-то еще, но я думаю, что что-то вроде этого принадлежит контроллеру. Я не делаю ничего в своем коде зрения, кроме отображаемых переменных, ничего более сложного, чем if или foreach. Конечно, не вызывающие функции, которые обращаются к базе данных. Все это должно быть загружено контроллером, представление должно только решить, нужно ли отображать его или нет.

0

Зависит от своего контекста и объема действительно.

Является ли $ obj контроллером или слоем модели? Это должно ответить, действительно ли это на мой взгляд.

В ответ на чтение других ответов.

Название функции само по себе относится к простому способу получения. Он может звонить на db через слой контроллера. Я бы сказал, это нормально. Особенно, если он использовал некоторую форму кэширования в памяти. (т. е. геттер - это сеттер, поскольку вы хотите его кэшировать только тогда, когда он используется один раз.)

+0

Это был его аргумент ... «Он зашифрован после первого звонка ...» Но ... это было бы «кэширован», если вы поместили его в переменную и передали его в представление, а также – SeanJA

+0

. Кэширование по требованию будет работать только в том случае, если оно будет только кэшироваться по требованию. т.е. при первом вызове. Любой другой способ, и он не будет работать так, как предполагалось. Что-то в этой функции должно позвонить кому-нибудь. Уровень представления не вызывает этот вызов в db. Он делает вызов объекту. Объект вызывает вызов x. – Louis

+0

Кроме того, если фактический вызов db в этой функции означает, что что-то не так. Должен быть слой модели между ними. Если он делает вызов на уровне контроллера, то это отлично imo. – Louis

 Смежные вопросы

  • Нет связанных вопросов^_^