0

假设我想要一个代表动物园的网页。应该有一个附件列表(大约一万个),并且应该可以通过三种方式显示它:

  • 所有外壳,
  • 仅当前登录用户标记为收藏的附件,
  • 只有当前登录的用户评论过的附件。

在所有这些情况下,列表可能太长而无法放在单个页面上,因此应该使用分页栏将其分成多个页面。

为了简化对特定机箱的搜索,所有三种模式都应支持通过关键字进行额外过滤(机箱名称中的全文搜索)。即,用户应该能够例如显示所有标记为收藏并在其名称中包含给定字符串的附件。当然,列表仍然可以很大,分页也适用于此。

问题是——如何设计DAO层,避免代码重复和意大利面条代码充满条件?此外,最好将代码划分为抽象层/区域,这样例如用于构建最终 SQL 查询的代码就不会不一致地分散在来自不同抽象层的许多不同类中。

4

2 回答 2

1

假设这里有一个传统的请求/响应 Web 应用程序样式是一个草图:

将各种过滤选项表示为支持 DAO 代码的类。让 Web 客户端指定表示过滤选项的 URL 参数。您需要一种方法来确保始终在每个请求上发送过滤选项,或者将它们存储在用户的会话中。

将过滤参数映射到过滤选项并将选项传递给您的 DAO。在您的 DAO 查询中,将过滤选项“扩展”为针对数据库的适当 where 子句。

对于分页,有分页“窗口”的概念。例如,您可以有一个类来表示起始行以及要返回的行数。同样,将该类扩展为针对数据库执行的谓词。

还有其他方法可以实现这一点(可能使用现有的数百万个框架之一),但如果我必须从头开始开发它,我会采用这种方法。

于 2013-09-30T22:26:05.683 回答
0

由于我误读了您的标准,因此正在编辑我的原始答案。您的 DAO 将与任何其他基本 DAO 相同。它将(基本上)对三个查询中的每一个都有一个 GET 方法。如果用户想在那之后缩小标准,我建议使用像DataTables 这样的 jquery 插件。,假设在 DAO 方法中返回的数据量不是非常大。该插件将允许您将过滤器添加到在您键入时更新的每一列,并且还具有排序、搜索和分页功能。

于 2013-08-30T18:46:43.313 回答