当前位置:主页   - 电脑 - 网站开发 - ASP.Net
信息系统开发平台OpenExpressApp - 数据懒加载
来源:网络   作者:快乐学习   更新时间:2011-10-11
收藏此页】    【字号    】    【打印】    【关闭

  性能是应用开发中经常要考虑的质量属性之一,本篇讲解一下OpenExpressApp目前对数据懒加载的处理。

  列表对象懒加载

  问题:在《内置支持的模块类型 》中介绍过系统支持的但据模块类型如下图所示:如果一次性获取所有数据,这将带来大量的数据查询传输,所以需要考虑列表对象的懒加载数据

信息系统开发平台OpenExpressApp - 数据懒加载

  查看原图(大图)

  方案:当模块打开(或者查询)时获取的列表对象仅仅是根对象信息,当点击某列表记录时才去获取实际的整个聚合。

  每个根对象实现一个GetRoot方法,只获取聚合中的根对象信息,不获取子对象属性

  每个根对象实现一个Get方法,获取整个聚合

  当获取列表时系统调用GetRoot方法,获取单个对象时调用Get方法

  注意:这个只是针对根对象有效,子对象懒加载根据性懒加载来处理。

  子对象属性懒加载

  问题:还是上面那个图示模块,加入每个子对象的子子对象都有很多记录,那么一次性获取所有对象则会带来大量的数据传输,获取一个对象需要花费较多时间

信息系统开发平台OpenExpressApp - 数据懒加载

  方案:在客户端获取数据时,我们希望一次性能够尽可能获取更多的数据,但数据量大时则需要要考虑分批获取数据。对于子对象很大时,采用子对象属性懒加载,UI上进行相应控制,当点击子对象页签时才去服务器端获取数据。

  属性懒加载编写代码模式如下:《信息系统开发平台OpenExpressApp - 性能相关》中也有相关内容

private static PropertyInfo<ChildType> ChildProperty = RegisterProperty(new PropertyInfo<ChildType>("Child"));
public ChildType Child
{
  get
  {
    if (!FieldManager.FieldExists(ChildProperty))
      if (this.IsNew)
        LoadProperty(ChildProperty, ChildType.NewChild());
      else  
        LoadProperty(ChildProperty, ChildType.GetChild(this));
    return GetProperty(ChildProperty);
  }
}
 
internal ChildType GetChild(ParentType parent)
{
  return DataPortal.Fetch<ChildType>(new SingleCriteria<ChildType, int>(parent.Id));
}
 
private void DataPortal_Fetch(SingleCriteria<ChildType, int> criteria)
{
  MarkAsChild();
  // load child with data from database
}

  注意:懒加载属性需要根据业务对象来定,当每个子对象数据量都很大时,为了减少网络一次性的传输量,这时需要考虑使用子对象属性懒加载方式加载子对象。

  自关联对象关系和UI懒加载

  问题:当自关联对象有好几千个对象时,构造对象间的关系和加载到树形控件中需要较长时间

信息系统开发平台OpenExpressApp - 数据懒加载

  方案:从UI上考虑先只加载第一级节点对象,当Expand节点时再建立与子对象的关系,并且加载到树形控件中。

  注意:由于关系懒加载会导致操作时的一些复杂性,如果要自己扩展树形操作,则需要在全部关系基础上时确保通过代码建立了所有对象间的关系

编缉推荐阅读以下文章

  • 信息系统开发平台OpenExpressApp - 模型相关Attribute介绍
  • 信息系统开发平台OpenExpressApp - 用户权限模块设计
  • 信息系统开发平台OpenExpressApp - CSLA类库编写
  • 信息系统开发平台OpenExpressApp - 支持WPF主题样式
  • 信息系统开发平台OpenExpressApp - 性能相关
  • 信息系统开发平台OpenExpressApp - CSLA约定及框架约定
  • 信息系统开发平台OpenExpressApp - 支持列表分组(Group)
  • OpenExpressApp控件 - 采用WCF作为分布式应用支持
  • 信息系统开发平台OpenExpressApp -如何部署OEA应用
  • 信息系统开发平台OpenExpressApp - ClickOnce智能部署
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明