0

我正在努力尊重 MVC 模式。它大大简化了开发人员(或开发人员)的生活。我想知道的是如何一次加载多个部分。

为了清楚起见,我将以待办事项列表为例(这几天很常用)。假设有项目 -> 里程碑 -> 任务。

我们需要的:

  • 全部获取 - 具有所有里程碑的所有项目以及嵌套 json 编码数组中的所有任务。
  • 只得到项目
  • 只获得里程碑
  • 只得到任务

对于最后三个,我们可以有单独的控制器来为我们提供相应的数据。当我们尝试在嵌套的 json 编码数组中“全部获取”时,问题就出现了。

处理这个问题的最佳方法可能是什么?

我想到了一些可能性:
- 将项目、里程碑和任务生成器移动到辅助类中 - 这意味着我们从各个控制器调用它们,并在需要全部获取它们时调用它们
- 从项目的角度来看,调用(每个项目的)里程碑的控制器/视图[依次调用(每个里程碑的)任务的控制器/视图]。这可能看起来像是 1 中 3 个请求的模拟。

动机来自这样一个事实:虽然我可以获取所有项目,然后是每个里程碑的里程碑,然后是每个里程碑的任务,但这需要很多请求。如果我们可以一次完成所有调用,那么获取数据所需的时间就会大大减少,更不用说在一次请求中数据更有条理了。

4

2 回答 2

1

您肯定需要将数据访问问题分离到可以从不同控制器访问的逻辑层中。

如果您愿意走 DDD 路径,那么识别您的域对象(项目、任务等)、聚合根然后为数据访问构建存储库是有意义的。您可以在不同的控制器中重用存储库(例如 ProjectRepository、TaskRepository),并且存储库本身将成为重用单元,允许您使用相同的接口从多个控制器获取数据。如果您需要有效地从同一个控制器的多个存储库中获取数据,您还可以利用一个工作单元。

如果您不走 DDD 路径,您可以使用 ActiveRecord 模式(如在 Ruby on Rails 中),它将是数据库记录的内存表示。如果您使用的是关系 SQL 数据库,这可能很容易实现。

我认为您的项目是聚合根,这意味着您将只有一个存储库(ProjectRepository)。该存储库将具有获取所有项目并获取所有相关数据(里程碑等)的操作,这将是一个尽可能接近数据源(存储过程?)优化的快速操作。在控制器本身上,您将使用检索到的对象并将其序列化/编码为 JSON。

于 2012-09-30T09:50:30.353 回答
0

从浏览器发出 3 个独立的 JSON 请求。不用担心。如果您打开 Firebug,然后打开 mail.google.com - 您会看到超过 40 个请求。

于 2013-09-11T00:30:09.883 回答