【问题标题】:MVC pattern with only one controller class?只有一个控制器类的 MVC 模式?
【发布时间】:2013-07-04 16:35:18
【问题描述】:

我正在学习 MVC 模式,特别是 php,并且阅读了一些很棒的教程。我已经设法建立了一个有效的基本限制。只是为了好玩,我开始尝试控制器、模型和视图是如何交互的,最​​终得到了一个控制器类,它根据请求的页面创建模型/视图。所以我只是在主 index.php 中实例化这个控制器并将 url 值传递给它。例如,“mysite/blog/recent”将使控制器包含(并实例化)“models/blog/recent.php”文件,该文件包含模型和视图文件夹中的相应视图。我的问题是,为网站的每个部分提供实际的控制器类,而不是仅仅将模型分离到不同的文件夹(即“博客”)并用一个控制器类加载它们是否有优势?

【问题讨论】:

  • 模型是一个层,而不是一个类或对象。并且视图不是简单的模板。我不知道你用的是什么教程,但听起来他们都是废话。

标签: php model-view-controller


【解决方案1】:

在某种程度上,关于 MVC 的决策变得不那么枯燥无味了。对于一个非常小(且简单)的站点,您可能只需要一个控制器来为您完成所有工作,从模型中提取数据并构建视图。您当然可以构建您的 MVC 架构,以便所有模型和视图都由单个控制器实例化,但是当然,一旦您到达一个甚至远程复杂的站点,这很快就会崩溃。

我的建议是让您的控制器在概念上分离,就像您以模块化方式设计应用程序一样。我将拥有一个带有我所有博客方法和页面服务的 BlogController、一个 ContactController、一个 PortfolioController,它们都从一个主 PageController 继承,以确保当我的站点的这些不同部分的复杂性扩展时,我可以维护它们而无需一个大的“汤控制器”。

【讨论】:

    【解决方案2】:

    只要您使用 MVC 样式并养成为可以组织为对象 (tire.wheel.spoke) 的事物创建类的习惯,那么您就可以了。

    从小处着手——罗马不是一天建成的。您将拥有您的第一个控制器,然后当您添加更多功能时,您可能会添加另一个。我一直很喜欢从一开始就编写一个调用你的控制器的 API 的想法,因为许多现代网站最终都必须这样做,并且从一开始就这样做会迫使你组织你的控制器并简化你的命令结构。

    祝你好运!

    【讨论】:

    • 谢谢!感谢您快速而有帮助的回复。
    • 我的荣幸。如果我的回答“解决”了您的问题,请注明!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多