我有3层EJB应用程序,我需要在胖客户端(桌面Java应用程序)上创建一个显示非常大的对象集合(超过5000个订单)的视图。每个对象都具有子属性,这些属性也是复杂对象,例如:
class Address
{
String value
// other properties
}
class Order
{
public String Number
// this is collection of complex object and I need first and last object to show it's
// properties in view
public List<Address> getAddresses()
// other properties
}
视图是订单表:
号码| FirstAddress | LastAddress | ...
我的第一次尝试是加载完整的订单列表(没有子属性),然后在需要显示时动态下载子对象。但是当我有10000个订单并开始快速滚动时,UI就会变得没有响应。
然后我尝试加载所有需要在表中显示的订单和所有子项,但UI变得非常繁重和缓慢,可能是因为内存成本)。而且它根本不是胖客户端,因为我从db下载了几乎所有数据。
解决此任务的最佳做法是什么?
答案 0 :(得分:2)
关注值对象或数据传输对象模式。只发送你真正需要的东西。而不是发送域对象的图形,只需为每个视图创建一个或多个“愚蠢”平面对象(包含简单属性)。
答案 1 :(得分:2)
我建议实现某种分页,换句话说,你必须实现一种只检索所有数据的一小部分的机制,并在不同的页面中按块显示它们。
到目前为止,“如何”取决于你的方法。
希望这有帮助!
答案 2 :(得分:2)
假设您使用JTable
作为合适TableModel
的视图,请在结果到达时使用SwingWorker
和publish()
查询数据库。为简单起见,这个example只是以10为块的方式获取随机数据。请注意,随着数据的累积,UI仍然保持响应。
答案 3 :(得分:1)
建议为你的列表创建一个代理对象,它只获取它的元素的一小部分,以及总数,然后能够按需加载原始列表的其他部分