MVC - 模型是否应该与(a)其他模型交互?或者控制器应该这样做?

时间:2015-10-12 01:09:16

标签: php model-view-controller

如果这听起来是个愚蠢的问题,请道歉,但如果我从不问,我将永远不会学习。我最近一直在使用MVC实现模式,我还在学习东西,所以请耐心等待。

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

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

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

我应该怎么做?

  1. language model object 中实例化author model objectarticle controller并调用其相关函数以获取数据,然后合并/合并其数据使用article model(所有 article controller 中的数据)?

  2. 实例化 language model 中的author modelarticle model并调用其函数以获取其数据,然后合并/合并其数据使用 article model 本身的数据?

  3. article model 中执行加入嵌套选择以从多个表中获取数据,而不是与任何其他模型进行交互,即使这意味着某些查询将在模型上重复进行?

  4. 另一种方法?

  5. 最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

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