讨论一下jive和jf的分页

Jhonney 08-01-02

感觉jive的分页挺好
但jf的分页感觉有些概念很容易混淆

另外两者的实现方法差异很大,jf分页好像有问题

希望能共同探讨一下

banq
2008-01-02 10:23

多谢,两者基本思路是一致的,因为JF引入多层架构,分页功能分表现层标签 和持久层两个层次实现,中间又可以由业务层自由定义,也可以和其它持久层框架提供的分页功能结合,因此,可能显得一些复杂,这是考虑通用性的代价,具体可以用JiveJdon和Jive的分页进行比较。

Jhonney
2008-01-02 11:03

序号 : NTC67051-6359-010629968135
多谢banq的回复,辛苦了。俺还是挺支持您的
jive中的分页使用Iterator模式,感觉很是清晰
jf应该是使用了block和页两个概念
block是从底层取得定常(200)的块,而页就是页面上的分页的概念

但问题是
QueryConditonDatakey中方法
public int getBlockStart(){
int blockID = start / count;
int blockStart = blockID * count;
return blockStart;
}中blockID并不是以blockSize为分界的
另外,获取的blockIDs似乎不应该以QueryConditonDatakey对象做cachekey吧

还有最核心的类BlockStrategy中的getBlock方法中
获取当前页面的ids,如果当前页面的数据跨两个block,应把跨block的这部分IDS找出来
加到currentBlock中吧,似乎程序中就加了一下count而已,不解..。
并且该方法似乎没有做页面IDS在block中的绝对定位

可能banq的思路可能完全不同吧

Jhonney
2008-01-02 14:16

另外,请教一下banq,BlockStrategy中的locate,哪个地方会具体用到啊

banq
2008-01-03 14:20

JF和Jive其实都是采取Iterator模式和Block 页的概念,只是Jive将Block藏在一个内部类中,这样问题就是分页功能只能用在Jive中,不能抽象到框架,进而推而广之。正是这个考虑导致Jf在Block细节上不同于Jive。

这点你比较细心,Jf在block还有其他原因不同于Jive,具体原因现在一下子想不起来了,当时为这块是费了点脑子。进而表现在代码上有些不够简洁,从另外一个侧面可以看出,自动分页功能在多层结构中能形成框架,也不是很容易,否则这样一个常用功能很多框架都会自动早早提供了。

>获取当前页面的ids,如果当前页面的数据跨两个block,应把跨block的这部分IDS找出来加到currentBlock中吧

当初设计是这么考虑的,而且也是这么实现,可能会在其他地方实现了,你再仔细看看。总之这个地方主要创建一个PageIterator,而PageIterator产生不依赖持久层具体技术,是JDBC或Hibernate/Ibatis都可以,这也是区别Jive的一个地方。PageIterator是从最大为200的Block中获得,缓存保存的是200个IDS的Block,这样提高缓存效率,因为终端查询页面条目数不固定的,有时是一页50个,有时一页100个,统一用200个缓存效率高些。

欢迎讨论,有些具体技术细节由于过去近两年,可能回答不是很精确,但是大体思路还在。
[该贴被banq于2008-01-03 14:24修改过]