MVC, как организовать кеширование частей страницы и как быть с View? - PullRequest
1 голос
/ 08 марта 2010

Прямо сейчас я пытаюсь создать свой собственный крошечный 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 Ответ

1 голос
/ 09 марта 2010

Идея MVC для тех, кто может читать это, кто не знает, состоит в том, чтобы разделить архитектуру сайта MODEL, VIEW и CONTROLLER. Я наиболее знаком с CakePHP MVC Framework. Так что этот ответ будет основан на моих знаниях MVC, поскольку он относится к CakePHP.

Поскольку информация, которую вы предоставляете, должна быть предоставлена ​​представлению, я бы предложил создать ее в качестве помощника HTML. Помощник предназначен для обеспечения многоразового кода для представления. Контроллер - это реализация логики кода (что делать с данными, поступающими из форм в представлении, какие представления вызывать, запрашивать модель для данных и т. Д.).

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

...