MVC大型网站,使用一个控制器...或许多?

时间:2009-09-29 00:00:07

标签: php model-view-controller no-framework

我有一个非常大的网站,我正在寻找最有效的方法来管理它(我是唯一的编码器)。

我正在尝试设计一个非常简单的MVC结构(我不想使用框架)来帮助我保持所有代码的顺序。

对于一个庞大的网站,最好只有一个控制器来处理所有页面,还是更好,更容易拆分它们?

如果只有一个,那么非框架控制器的一个很好的例子是什么?

5 个答案:

答案 0 :(得分:4)

我会将任何逻辑分区分成不同的控制器 - 如果它是所有静态页面,则使用所有相同的“静态页面”控制器进行提供。

如果您有一些静态页面,FAQ页面(或部分),产品列表 - 为每个不同的部分使用控制器。因此静态页面将由一个控制器从平面文件或数据库中提取,FAQ页面将由另一个控制器从FAQ表生成,产品和信息将由任何源生成。

每次生成页面或访问数据的方式时,请使用其他控制器。

当然,类继承可用于使用任何控制器所需的代码创建基类。

不确定非框架控制器的意思 - 我会检查Zend(喘气)'框架',MVC模式,甚至控制器本身,可以与框架的其余部分分开使用。 / p>

答案 1 :(得分:4)

我倾向于根据他们对站点/应用程序的特定部分的责任来拆分控制器。这使得维护代码变得更加容易。此外,我将模块(文件夹)中的控制器(和视图,模型)分组。以下是我正在处理的当前项目的示例:

  • 博客
    • 帖子
    • 评论
    • 分类
  • 设置
    • 帖子
    • 用户

网站越复杂,我使用的模块就越多。虽然我的大多数模块只包含一个“索引”控制器,但我确实喜欢它们提供的组织。

然后我使用路由器(前端控制器)将REST样式的URI映射到正确的模块/控制器/动作。例如:mysite.com/blog/posts/view/7将从“博客”模块调用Controller_Posts :: view(7)。使用模块的另一个好处是,我可以拥有比没有模块时更具体的URI。虽然我认为可以通过使用支持定义自定义路由的路由器来解决,但我不太喜欢它。

与其他许多事情一样,它归结为您作为开发人员所熟悉的内容,但我们可能会同意您拥有的组织越多,您就越好,只要您不会使事情变得复杂。

暂时不说,我建议您考虑使用框架。我理解你是否不想使用其中一个,因为我也避免使用过。我最后写了自己的东西,在过去的一年里我一直很好。这是一次很棒的学习经历,它只包含想要/需要的东西。话虽这么说,你可能想看看Kohana和CakePHP - 他们并没有过度膨胀IMO,如果你决定不写自己的话,他们肯定会节省你的时间。

答案 2 :(得分:3)

通常人们将控制器分成控制器,专注于特定的功能区域。

然后他们在前面贴了一个“前控制器”,所以应用程序只有一个入口点。前端控制器的唯一工作是将传入的请求路由到适当的控制器。

查看Zend_Controller组件的设置方式。它可以提供您需要的一切,并且您可以自由使用它而无需购买完整的Zend Framework。

答案 3 :(得分:1)

这取决于你的其他部分如何运作。如果您只有一个模型文件,则可能不值得拆分控制器。如果你可以将模型分成几个部分以及控制器,那么就这样做。

但是,我经常发现模型之间的重叠太多,无法将它们分开。您可能有文章的模型,但如果您想在其他页面的侧边栏中显示前20篇文章,那么该代码应该在文章模型中 - 并且您将在每个页面上都需要它。

老实说,唯一的办法就是试试看。从单个入口点开始,如果它变得太笨重,则将其重构为较小的块。

答案 4 :(得分:1)

一个路由器/调度员,很多控制器都是我的建议。控制器应该映射到URL,这意味着不同的功能。控制器将与不同的服务协作以完成每个用例,因此如果您的应用程序具有多个用例,则整个应用程序的一个控制器将变得过于笨重。