【问题标题】:Do I need to create a Model for every Controller? What is the better practise?我需要为每个控制器创建一个模型吗?更好的做法是什么?
【发布时间】:2011-11-09 09:02:37
【问题描述】:

假设我有一个模型“Retrieve.php”,其中有一个名为“Retrieve”的类,它从数据库中检索帖子。然后我在Index.php 中有控制器,我在其中加载该模型,检索帖子并将其传递给查看。

现在,我又多了一个页面,我必须在其中显示这些帖子。比方说Sidebar.php 什么的。现在,我必须检索这些帖子。那么,我可以再次加载“Retrieve.php”,还是必须为Sidebar.php 创建一个扩展“Retrieve.php”的模型?有什么更好的做法?

而且,一般来说,我是否需要在一个好的 PHP MVC 中为每个控制器创建一个新模型?如果是,可能 Controller 和 Model 应该命名相同?还有什么建议/cmets?

谢谢。

【问题讨论】:

  • 模型类应该命名为 Posts,而不是 Retrieve。使用名词作为类名。

标签: php oop model-view-controller frameworks


【解决方案1】:

一般来说,模型应该代表一个业务实体,而不是一个流程。也就是说,它应该是名词而不是动词。在您的情况下,您需要一个帖子模型,并且该模型上的方法将执行“您对帖子所做的事情”。然后控制器描述页面发生的操作。在这种情况下,/post 页面的控制器将检索帖子并将其传递给视图以进行渲染。

【讨论】:

    【解决方案2】:

    没有——

    Model 应该是您的应用程序管理的内容 - 因此,您的模型类可能应该是 Post,而不是 Retrieve(并且您的域中的名词可能还有其他 Model 类 - Thread、Author...)

    控制器应该访问他们完成工作所需的模型类;一个模型类可以被多个控制器使用,一个控制器可以使用多个模型类。

    【讨论】:

      【解决方案3】:

      对于该模型所代表的每个数据结构,您应该只有一个模型类。因此,如果您有 5 个控制器,每个控制器都访问同一个模型,那么您仍然应该只有一个模型类。

      【讨论】:

        【解决方案4】:

        只创建您需要的模型。请记住,MVC 的全部意义在于模型与视图分离。这意味着重复使用完成工作所需的任何东西都很好。如果您有多个视图需要访问相同的数据,只需重用相同的模型。请务必为模型提供描述性名称,这样就不会混淆它们应该代表的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 2015-08-01
          • 2012-02-02
          • 1970-01-01
          相关资源
          最近更新 更多