1

我有一个用 PHP 编写的原型网站。最近我重写了代码以将逻辑与布局和数据库操作分开。所以现在我有了类似 MVC 代码设计的东西。

现在困扰我的是,在 MVC 中我将有很多文件,并且每个文件在与其他文件(模型+视图+控制器)结合时都会显示一些内容。所以我发现创建类似于我的 MVC 部件的小部件会很有用。

例如,当我有产品视图的 MVC 时,我会创建一个 PHP 文件,该文件以这种方式组合 MVC 部分文件,以根据我传递给这个新 PHP 文件的 GET 值显示产品。

我将以这种方式完成的是,任何小部件、网站的子部分都可以单独查看并与其他部分分开使用。所以它可能是小部件或 Firefox 浏览器设计之类的东西。

所以我可以分别测试网站的每个部分,而不是只将这些部分组合到当前实际的网站页面设计中。因此,用户测试也会更容易,并且演示文件会非常简短且易于理解。

我想知道您对此有何看法。我不想陷入设计中的任何漏洞,我认为这是未来保持网站代码轻松维护的重要时刻。

我对么?

4

2 回答 2

1

MVC 我会有很多文件,当与其他文件结合时,每个文件都会显示一些东西(模型+视图+控制器)

这听起来像你没有得到正确的 MVC 模型。只有视图有内容或“显示某些东西”。

基于此,您可以创建仅创建类似于小部件的内容部分的操作,然后可以将其组合到您的布局中。

我想推荐阅读Zend_Layout 快速入门

于 2009-01-13T11:24:04.340 回答
1

您的问题的答案是view composition

建议你把整个屏幕分割成小块:顶栏、二级导航栏、产品列表、预览区等等。这些可以由单独的视图、视图助手或控制器中的其他方法提供。然后控制器操作将使用简单的 HTML 布局将片段组合成单个屏幕。

例如。对于静态的顶栏,这可能是专门的视图。对于动态的产品列表,它可能是getProductsList($categoryId)提供复杂视图的控制器方法。产品预览可以通过视图助手交付。请参见以下示例:

// inside class ProductsController
public function index($categoryId, $productId = null) {

    // specialised view
    $topBar = new TopBarView();
    $topBar->selected = 'products';

    // helper method
    $list = $this->getProductsList($categoryId);

    // helper object
    $previewHelper = new PreviewHelper($productId);
    $preview = $previewHelper->getView();

    // view composition
    $view = new View('path/to/template.tpl');
    $view->add($topBar);
    $view->add($list);
    $view->add($preview);
    return $view;

}

这只是说明合成如何工作的示例。

拥有交付小部件(即产品列表)的方法的隐藏好处是它可以被重用以支持 Ajax。更改类别需要 Ajax 调用getProductsList具有新类别 ID 的方法。

于 2009-01-13T11:36:05.827 回答