Php MVC架构决策-如何将现有方法重新考虑到控制器/视图和数据库访问中

Php MVC架构决策-如何将现有方法重新考虑到控制器/视图和数据库访问中,php,sql,asp.net-mvc,Php,Sql,Asp.net Mvc,考虑以下场景: 页面是用经典的ASP或PHP编写的,它呈现一个数据报告(为了简单起见,有一系列HTML表)。页面呈现时,有一个主数据库查询,然后有多个子查询。该报告被拆分为与子查询相关的子面板。因此: 主数据库查询 循环结果 对于每一行,执行子查询和渲染报告面板 您将如何使用MVC模式构建类似的报告 这可以分为两部分: 多个查询在数据库级别的效率取决于外部查询的值 如果所有数据都在控制器中处理和准备,如果在控制器内循环,然后再次在视图中渲染,这也将被视为低效。可以使用子控制器或子面板,它们封装逻

考虑以下场景:

页面是用经典的ASP或PHP编写的,它呈现一个数据报告(为了简单起见,有一系列HTML表)。页面呈现时,有一个主数据库查询,然后有多个子查询。该报告被拆分为与子查询相关的子面板。因此:

  • 主数据库查询
  • 循环结果
  • 对于每一行,执行子查询和渲染报告面板
  • 您将如何使用MVC模式构建类似的报告

    这可以分为两部分:

  • 多个查询在数据库级别的效率取决于外部查询的值
  • 如果所有数据都在控制器中处理和准备,如果在控制器内循环,然后再次在视图中渲染,这也将被视为低效。可以使用子控制器或子面板,它们封装逻辑的较小部分,即加载数据和呈现报告面板

  • 请注意,这可能看起来有点模糊,但我对您如何处理解决方案感兴趣。

    使用MVC模式,视图不应运行任何查询。 视图应仅用于显示已传递给它的数据

    根据您所描述的,您可以拥有一个报告模型,该模型具有生成报告的功能

    控制器将调用模型上的函数,并将数据传递给视图。
    在这种情况下,控制器将循环创建后续报告,但是循环应该是非常基本的,因为真正的逻辑已经放在模型中了

    如果您想使用分包商,请观看以下视频:


    使用
    RenderAction
    可以将报告生成拆分为更小的部分。如果您想让用户体验更好(因为使用
    RenderAction
    只能让您的代码看起来更好),您应该创建用于生成每个子报表的操作,并使用ajax调用它。

    我的最终解决方案将所有数据检索都放在一个存储库中,然后在控制器中聚合各种位,以便在视图中显示