MVC -模型应该与(一个)其他模型交互吗?或者控制器应该这样做


MVC - should a model interact with (an)other model(s)? Or the controller should do that?

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

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

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

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

我该怎么做呢?

  1. article controller 中实例化language model objectauthor model object,并调用它们的相关函数来获取数据,然后将它们的数据与article model的数据合并/合并(如上所述,全部在 article controller 中)?

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

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

  4. 另一种方法吗?

最好的方法是什么?

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