最近,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 数据加载和处理的问题放回到底层,让程序员中心放到领域模型的业务上去。
尤其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 数据加载和处理的问题放回到底层,让程序员中心放到领域模型的业务上去。