java我应该如何设计DAO层
假设我想要一个能代表动物园的网页。应该有一个附件列表(大约一万个),并且可以通过三种方式显示:
- 所有附件
- 只有当前登录用户标记为收藏夹的存储模块
- 仅限当前登录的用户对其发表评论的机柜李>
在所有这些情况下,列表可能太长,无法放在单个页面上,因此应使用分页条将其划分为多个页面
为了便于搜索特定机柜,所有三种模式都应支持通过关键字进行额外过滤(机柜名称中的全文搜索)。例如,用户应能够显示标记为收藏夹的所有机柜,这些机柜的名称中包含给定字符串。当然,列表可能仍然很大,分页也适用于这里
问题是-如何设计DAO层以避免代码重复和充满条件的意大利面代码此外,将代码划分为抽象层/区域也可以,这样,例如,构建最终SQL查询的代码就不会不一致地分散在不同抽象层的许多不同类中
# 1 楼答案
假设采用传统的请求/响应web应用程序样式,下面是一个示意图:
在DAO的支持代码中将各种过滤选项表示为类。让web客户端指定表示过滤选项的URL参数。您需要一种方法来确保每次请求时总是发送过滤选项,或者将它们存储在用户的会话中
将过滤参数映射到过滤选项,并将选项传递给DAO。在DAO的查询中,将过滤选项“扩展”到数据库的适当位置
对于分页,有分页“窗口”的概念。例如,可以有一个类来表示起始行和要返回的行数。同样,将该类扩展为针对数据库执行的谓词
还有其他方法可以实现这一点(可能是使用现有的一百万个框架中的一个),但如果我必须从头开始开发,我会这样做
# 2 楼答案
编辑我的原始答案,因为我误读了你的标准。你的刀将和其他基本刀一样。对于这三个查询中的每一个,它(本质上)都有一个GET方法。如果用户希望在这之后缩小标准,我建议使用像DataTables.这样的jquery插件,假设DAO方法中返回的数据量不是惊人的巨大。该插件将允许您为每一列添加过滤器,并在键入时更新,还具有排序、搜索和分页功能