代码之家  ›  专栏  ›  技术社区  ›  JohnFx

有没有一个共同的设计模式,使一个集合类页面能够?

  •  1
  • JohnFx  · 技术社区  · 15 年前

    我已经多次遇到这个设计问题,我想知道是否有一个通用的OOP设计模式可以解决这个问题。

    设计问题:我需要实现一个类,该类表示一组可以变得非常大的对象。出于性能方面的考虑,在用户浏览数据时,表示层将在单个页面中显示数据,一次只请求对象的一小部分。理想情况下,对象还可以有选择地按需查询数据库,而不是将所有内容预加载到内存中,而对于非常大的集合,客户机/用户可能永远不会请求集合中的所有数据。

    我已经实现了很多方法,但是没有一种感觉非常模块化,干净,或者有一个真正直观的界面。

    是否有一个通用的OOP设计模式来实现一个对象,该对象允许客户端一次提取一页数据,并且只在需要时才从数据层查询数据?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Thomas Owens    15 年前

    我将扩展(或创建)一个迭代器类,并添加一个构造函数参数,该参数指定每页的项数,并添加一个nextpage()方法,该方法返回适当大小的集合(如果没有足够的项来填充页面,则小于该集合)。

    另一个选项是简单地扩展或创建一个迭代器类,并创建一个nextpage()方法,该方法采用一个整数,该整数是页面上应该出现的最大项数,返回一个适当大小或更小的集合。

    迭代器模式在GOF手册中,如果需要引用的话。

        2
  •  1
  •   Charles Bretana    15 年前

    如果您一次只想从数据库中提取一个页面,那么这可以作为数据库模式来完成。无论您是在数据库中还是在访问层中实现它,您都需要知道: 正在请求的项目总数、页面大小。

    然后,代码需要为所有项目创建一个完整的可索引(它有项目编号)的键值列表,根据需要或指定进行排序,然后只返回那些带有索引的项目的所有数据,这些索引将它们放在请求的页面中。

    例如,在SQL Server中(使用适当的索引),可以在单个存储过程中使用表变量保存键的排序列表,并快速返回任何数据页。