1

现在我正在尝试创建自己的微型 MVC(只是为了练习和理解 MVC 模式细节)。我想缓存部分页面(下拉列表、列表等),但我不知道组织它的最佳方式是什么。

假设我有 PostsController 和 getPostDetailsS​​hortly($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:对不起我的英语,但我希望它很清楚。

谢谢!

4

1 回答 1

1

对于那些可能正在阅读本文但不知道的人来说,MVC 背后的想法是将站点的 MODEL、VIEW 和 CONTROLLER 架构分开。我最熟悉的是 CakePHP MVC 框架。所以这个答案将基于我对与 CakePHP 相关的 MVC 的知识。

由于您提供的信息需要提供给视图,因此我建议将其构建为 HTML 帮助程序。Helper 旨在为视图提供可重用的代码。控制器是代码背后逻辑的实现(如何处理来自视图上的表单的数据、调用哪些视图、向模型询问数据等)。

查看您正在谈论的有关缓存这些项目的问题。我认为,如果您预计会获得大量流量,这是一件好事,但否则就没有必要了。话虽如此,似乎问题更多的是关于架构而不是缓存。当前的架构看起来不错,但我会将功能移动到一个“组件”中,可以从所有控制器访问。这将允许您从需要它的任何控制器调用它,而不必每次都调用特定的控制器。

于 2010-03-08T23:54:20.133 回答