领域模型的超延迟加载初步设计

最近,taowen 同学引发的 领域模型的价值与困境等讨论,非常热烈。

尤其taowen 在 [url=http://www.iteye.com/topic/191261]贫血的Domain Model[/url] 中的RichSet 设计和我想到一处去了,呵呵。我顺带补充一下就 RichSet 我的想法,欢迎拍砖。

经常见到有朋友担心这样的问题, hibernate下 user.getTasks(), 一加载,所有的关联数据就都load到内存里了。 其实按理 Framework 设计人员应该解决这个棘手的问题。

因此应该给集合类,List,Set,Bag等赋予行为,采用Super Lazy Load。超延迟加载技术。
1) user.getTasks() 时,不去load数据。 tasks.get(0), 时采取load数据;
2) tasks.get(0),并不全部load数据,采用分页方式,默认 pagesize可以配置,load出第一页数据;
3) tasks.get( x ), 也只load出 x 所在页的个记录。
4) 数据集合 tasks 作为一个 集合实例,应该保持一个query condition对象,以便在需要的时候和 持久层(可以是 DB,文件,内存,或另一个WebService系统)进行同步。
5) user.getDpartment() 这样的对 1 的关联也可以 lazy(目前hibernate等是支持的),super lazy load 下,可以在第一个属性访问的时候,例如 department.getName() 的时候,再去load。当然,策略可配。

大量数据的加载效率,重复加载等,由 cache 系统保证。
这样设计的目标就是让将 bulk 数据加载和处理的问题放回到底层,让程序员中心放到领域模型的业务上去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值