База данных вызовов в Smarty / views / templates
-
05-07-2019 - |
Вопрос
Сегодня на работе кто-то пытался убедить меня в том, что:
{$obj->getTableInfo()}
подходит для smarty / mvc / templating, потому что он использует метод объектов. Я утверждал, что, поскольку он обращается к базе данных, ему там не место, и он должен быть в контроллере (на самом деле мы не используем MVC). Прав ли я в своем понимании логических разделений, которые используются в MVC и вообще в шаблонах? Или мне чего-то не хватает?
Решение
Ты прав. Он не прав.
Вызовы базы данных, независимо от того, в какой форме, должны жить в контроллере, если вы хотите сделать MVC правильно.
Очевидно, что люди ссорятся из-за того, что должно быть , и делают подобные вещи, но это не правильный путь.
Другие советы
Ну, нет "официального" правила или что-то, но я думаю, что-то подобное принадлежит контроллеру. Я ничего не делаю в своем коде представления, кроме переменных отображения, ничего более сложного, чем допускается цикл if
или foreach
-type. Конечно, не вызывая функции, которые обращаются к базе данных. Все это должно быть загружено контроллером, представление должно только решить, нужно ли ему это отображать или нет.
Зависит от контекста и области действия.
Является ли $ obj контроллером или уровнем модели? Это должно ответить, действительно ли это действительно по моему мнению.
В ответ на чтение других ответов.
Имя функции само по себе относится к тому, чтобы быть простым методом получения. Он может сделать вызов БД через уровень контроллера. Что я бы сказал, это нормально. Особенно, если он использует некоторую форму кеширования в памяти. (т. е. геттер является установщиком, поскольку вы хотите кэшировать его, только когда он используется один раз.)