假设我想要一个代表动物园的网页。应该有一个附件列表(大约一万个),并且应该可以通过三种方式显示它:
- 所有外壳,
- 仅当前登录用户标记为收藏的附件,
- 只有当前登录的用户评论过的附件。
在所有这些情况下,列表可能太长而无法放在单个页面上,因此应该使用分页栏将其分成多个页面。
为了简化对特定机箱的搜索,所有三种模式都应支持通过关键字进行额外过滤(机箱名称中的全文搜索)。即,用户应该能够例如显示所有标记为收藏并在其名称中包含给定字符串的附件。当然,列表仍然可以很大,分页也适用于此。
问题是——如何设计DAO层,避免代码重复和意大利面条代码充满条件?此外,最好将代码划分为抽象层/区域,这样例如用于构建最终 SQL 查询的代码就不会不一致地分散在来自不同抽象层的许多不同类中。