【问题标题】:MVC - should a model interact with (an)other model(s)? Or the controller should do that?MVC - 模型应该与(一个)其他模型交互吗?还是控制器应该这样做?
【发布时间】:2015-10-12 01:09:16
【问题描述】:

如果这个问题听起来很愚蠢,请道歉,但如果我不问,我就永远学不会。最近一直在研究MVC实现模式,还在学习中,请耐心等待。

我最近一直在开发一个多语言网站,该网站为客户端使用自定义 MVC 框架。在某些地方,我需要显示来自多个表的一些信息,例如一篇文章(来自文章表)、本文所用语言的名称(来自语言表)、本文所使用的语言尚未写入(也来自语言表)和作者(来自作者表)。

我有文章模型、语言模型和作者模型,每个模型都有自己的控制器。

如果我只查询文章表或只查询作者表,没有问题,但是当我想将来自这些不同表的信息显示到单个视图中时,就会出现混乱。

我应该怎么做?

  1. article controller中实例化language model objectauthor model object,并调用它们的相关函数来获取数据,然后将它们的数据与@中的数据组合/合并987654324@(都在提到的 article controller 中)?

  2. article model中实例化language modelauthor model并调用它们的函数来获取它们的数据,然后将它们的数据与来自article model 本身?

  3. article model 中执行 joinnested select 以从多个表中获取数据,而不是与任何其他模型,即使这意味着某些查询将在不止一个模型上重复?

  4. 另一种方法?

最好的方法是什么?

【问题讨论】:

    标签: php model-view-controller


    【解决方案1】:

    这可以通过多种方式完成:
    - 创建一个视图(MySQL 的虚拟表),它使用连接、嵌套选择或任何你想获得所有必要信息的方法,并在 MVC 中的这个视图之上创建一个模型(这个模型只能从视图中检索信息而不改变它,但是)
    - 使用存储库模式。存储库包含许多模型,您可以在此处实现业务逻辑(可能是多个模型/表上的 CRUD)。控制器只需使用存储库而不是模型。
    总之,模型、存储库应该包装它自己的所有业务逻辑,永远不要让控制器做这些事情。
    问候,

    【讨论】:

    • 不是创建视图,在其上创建模型会导致文章有两个模型(一个用于读取数据,一个用于修改数据)和两个控制器(每个模型一个)?我将研究存储库模式,但认为项目规模不足以为其实现存储库模式。
    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2015-09-18
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2013-03-14
    相关资源
    最近更新 更多