如果这听起来是个愚蠢的问题,请道歉,但如果我从不问,我就永远学不会。我最近一直在使用MVC实现模式,我还在学习一些东西,所以请耐心等待。
我最近在一个多语言网站上工作,该网站为客户端使用自定义MVC框架。在某些地方,我需要显示来自多个表的一些信息,比如一篇文章(来自articles表)、撰写这篇文章所用语言的名称(来自languages表)、尚未撰写这篇文章的语言(也来自languages表)和作者(来自authors表)。
我有一个文章模型、一个语言模型和一个作者模型,每个模型都有自己的控制器。
如果我只查询文章表或作者表,没有问题,但是当我想在单个视图中显示来自这两个不同表的信息时,就会出现混乱。
我该怎么做呢?
-
在
article controller
中实例化language model object
和author model object
,并调用它们的相关函数来获取数据,然后将它们的数据与article model
的数据合并/合并(如上所述,全部在article controller
中)? -
在
article model
中实例化language model
和author model
,并调用它们的函数来获取它们的数据,然后将它们的数据与article model
本身的数据合并/合并? -
在
article model
中执行join或嵌套select以从多个表中获取数据,而不与任何其他模型交互,即使这意味着一些查询将在多个模型中重复? -
另一种方法吗?
最好的方法是什么?
这可以通过几种方式实现:
-创建一个视图(MySQL的虚拟表),使用连接,嵌套选择或任何你想要实现所有必要的信息,并在MVC中创建一个模型在这个视图的顶部(这个模型只能从视图中检索信息,但不能改变它)
—使用存储库模式。存储库包装了许多模型,您可以在这里实现业务逻辑(可能是多个模型/表上的CRUD)。控制器只是使用存储库而不是模型。
总而言之,仓库应该自己包装所有的业务逻辑,而不是让控制器做这些事情。
问候,