我有一个相当大的网站,我正在寻找最省时的方式来管理它(我是唯一的编码员)。
我正在尝试设计一个非常简单的 MVC 结构(我不想使用框架)来帮助保持我所有的代码井井有条。
对于一个巨大的网站,是只有一个控制器来处理所有页面更好,还是将它们拆分更好更容易?
如果只有一个,非框架控制器的一个很好的例子是什么?
我有一个相当大的网站,我正在寻找最省时的方式来管理它(我是唯一的编码员)。
我正在尝试设计一个非常简单的 MVC 结构(我不想使用框架)来帮助保持我所有的代码井井有条。
对于一个巨大的网站,是只有一个控制器来处理所有页面更好,还是将它们拆分更好更容易?
如果只有一个,非框架控制器的一个很好的例子是什么?
我会将任何逻辑分区拆分为不同的控制器 - 如果都是静态页面,则使用所有相同的“静态页面”控制器提供服务。
如果您有一些静态页面、FAQ 页面(或部分)、产品列表 - 为每个不同的部分使用控制器。因此,静态页面将由一个控制器从平面文件或数据库中提取,FAQ 页面将由另一个控制器从 FAQ 表生成,产品和信息将由任何来源生成。
每次生成页面或访问数据的方式时,都使用不同的控制器。
当然,类继承可用于使用任何控制器所需的代码创建基类。
不确定您所说的非框架控制器是什么意思 - 我会检查 Zend(喘气)“框架”、MVC 模式,甚至控制器本身,都可以与框架的其余部分分开使用。
我倾向于根据控制器对站点/应用程序的特定部分的职责来拆分它们。这使得维护代码变得非常容易。此外,我在模块(文件夹)中对控制器(和视图、模型)进行分组。这是我正在从事的当前项目的一个示例:
网站越复杂,我使用的模块就越多。尽管我的大多数模块只包含一个“索引”控制器,但我确实喜欢它们提供的组织。
然后我使用将 REST 样式 URI 映射到正确的模块/控制器/操作的路由器(前端控制器)。例如:mysite.com/blog/posts/view/7 会从“blog”模块调用 Controller_Posts::view(7)。使用模块的另一个好处是我可以拥有比没有模块时更具体的 URI。虽然我认为可以通过使用支持定义自定义路由的路由器来解决这个问题,但我不太喜欢这样。
与许多其他事情一样,这归结为您作为开发人员感到满意,但我们可能会同意,您拥有的组织越多,您的生活就越好,只要您不要使事情变得过于复杂。
顺便说一句,我建议您考虑使用框架。我了解您是否不想使用其中的一种,因为我也避免使用它们。我最终写了自己的,在过去的一年里对我很有帮助。这是一次很棒的学习经历,它只包含我想要/需要的东西。话虽如此,您可能想研究一下 Kohana 和 CakePHP——它们并不过分臃肿的 IMO,如果您决定不自己编写它们,它们肯定会为您节省时间。
通常,人们将控制器拆分为专注于特定功能领域的控制器。
然后他们在前面放置一个“前端控制器”,因此应用程序只有一个入口点。前端控制器的唯一工作是将传入请求路由到适当的控制器。
查看 Zend_Controller 组件的设置方式。它可以提供您需要的一切,并且您可以自由使用它而无需购买完整的 Zend 框架。
这取决于您的其他部分将如何工作。如果您只有一个模型文件,那么可能不值得拆分控制器。如果您可以将模型拆分为多个部分以及控制器,请执行此操作。
但是,我经常发现模型之间有太多重叠,无法将它们分开。您可能有文章模型,但如果您想在其他页面的侧边栏中显示前 20 篇文章,则该代码应该在文章模型中 - 您将需要在每个页面上使用该代码。
不过老实说,唯一的方法就是尝试一下,看看。从一个单一的入口点开始,如果它变得太笨重,请将其重构为更小的块。
我的建议是一台路由器/调度程序,许多控制器。控制器应该映射到 URL,这意味着不同的功能。控制器将与不同的服务协作以完成每个用例,因此如果您的应用程序有多个用例,则整个应用程序的一个控制器将变得过于笨拙。