企业应用架构模式之延迟加载

    延迟加载也是一种对象-关系行为模式,其定义如下:一个对象,它虽然不包含所需要的所有数据,但是知道如何去获取这些数据。

    

    当一个对象的状态,需要从外部获得时,系统就需要从外部(包括数据库,文件系统,网络)加载数据。这时候,要考虑加载一个对象时需要从数据库(或文件)读取多少数据以及数据库调用的次数。这两个方面,前者涉及内存后者涉及速度,都是至关重要的系统性能参数。因此设计者需要使用一些方法来保证系统的这两个性能都是用户可接受的。


    延迟加载就是解决方法之一。它的使用时机一般包括:

(1)加载一个对象会引起大量相关对象的加载,如初始化某对象的时候,其中的某些域(属性)需要去连接数据库(或者说连接其他数据库),也就是说某个对象的是从数据库A中获得,但其部分属性需要从其他数据库获得,这时候需要考虑采用延迟加载来减少初始化时连接数据库的次数。

2)在内存受限的设备上,初始化某对象的时候,其中的某些域会占据很大内存,而这些属性很可能并不是一开始据需要使用到的。这时候可以使用延迟加载来读取部分数据以保节约内存空间。


    需要注意的是,延迟加载很可能带来的不是性能的优化。所以使用的时候需要谨慎。

   

    延迟加载的方法: 延迟初始化、虚代理、值保持器、重影。

    延迟初始化:每次访问对象的时候都检查它是否为空,如果为空就去获取信息创建该对象。


    虚代理:它是这样一个对象,它看起来应该是域中的一个对象,但实际上不包含任何东西,只有当它一个方法被调用时,它才从数据库中加载恰当的对象。


    值保持器:它是一个包装其他对象的对象,如果要获取基对象,可以访问值保持器得到它的值,但只有第一次访问值保持器时,才会真正从数据库中读取数据。


    重影:它是部分状态下的真实对象,当从数据库加载对象的时候,它只包含其ID,当访问对象的某个域时,它才会从数据库中读取其完全状态。


    延迟加载的风险:容易导致产生超出需要的数据库访问次数,既波动加载。如用延迟加载来填充一个集合,然后每次只访问其中一个元素。这样就会每访问一个对象就访问一次数据库,而不是一次把所需对象全部读出来。这种加载方式会严重影响系统的性能。
    解决方案:不使用延迟加载的集合,而使类集合本身成为延迟加载,加载类集合时一次加载全部内容。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值