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. Помощник предназначен для обеспечения многоразового кода для представления. Контроллер - это реализация логики кода (что делать с данными, поступающими из форм в представлении, какие представления вызывать, запрашивать модель для данных и т. Д.).

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

Другие вопросы по тегам