MVC, как организовать кэширование частей страницы и как быть с View?
Прямо сейчас я пытаюсь создать свой собственный крошечный MVC (просто для практики и для понимания деталей шаблона MVC). Я хотел бы кэшировать части страниц (выпадающие списки, списки и т. Д.), И я не знаю, как лучше организовать это.
Давайте представим, что у меня есть PostsController с методом getPostDetailsShortly($post_id). Этот метод может выглядеть так...
public function getPostDetailsShortly($post_id) {
if (!$post_id) return false;
$content = $this->memcache->get("post" . $post_id); //Trying to get post details HTML from memcache
if (!$content) { //Not fount in memcache
$model = new PostsModel();
$data = $model->getPostDetailsShortly($post_id);
$this->view->assign('data', $data);
ob_start();
$this->view->render();
$content = ob_get_contents(); //Getting view output into variable
ob_end_clean();
$this->memcache->set('post' . $post_id, $content, 1000); //Writing variable to memcache
}
return $content;
}
Теперь я должен сделать этот метод контроллера доступным из Views. Потому что я буду использовать его на других страницах, например, для создания списка похожих постов.
Какова лучшая практика делать это? Может быть, я ошибаюсь, и есть более эффективные способы организации частей кэширования страниц?
PS: извините за мой английский, но надеюсь, это понятно.
Спасибо!
1 ответ
Идея, стоящая за MVC для тех, кто может читать это, кто не знает, состоит в том, чтобы разделить архитектуру сайта MODEL, VIEW и CONTROLLER. Я наиболее знаком с CakePHP MVC Framework. Так что этот ответ будет основан на моих знаниях MVC, поскольку это относится к CakePHP.
Поскольку информация, которую вы предоставляете, должна быть предоставлена представлению, я бы предложил создать ее в качестве помощника HTML. Помощник предназначен для обеспечения многоразового кода для представления. Контроллер - это реализация логики кода (что делать с данными, поступающими из форм в представлении, какие представления вызывать, запрашивать модель для данных и т. Д.).
Просматривая вопрос, который вы говорите о кэшировании этих элементов. Я думаю, это хорошо, если вы ожидаете получить большое количество трафика, но в действительности это не нужно. Сказав это, кажется, вопрос больше об архитектуре, чем о кешировании. Нынешняя архитектура кажется разумной, но я бы переместил функциональность в "компонент", доступный из всех контроллеров. Это позволит вам вызывать его с любого контроллера, где он вам нужен, без необходимости каждый раз вызывать определенный контроллер.