zoukankan      html  css  js  c++  java
  • AOP的两个应用:实体集更新(DateEntityListUpdate)、延迟加载(LazyLoad)

    在FaibClass.Data中,有两个AOP的应用,它们分别是实体集更新(DateEntityListUpdate)、延迟加载(LazyLoad),目前的DataEntity继承于ContextBoundObject,刚刚从网上看到ContextBoundObject的损耗非常大,但自己测试了一下,应该说影响不是很大,所以暂时不打算使用静态注入了。

          注,两个AOP都采用Attribute--Property--Sink的结构,每个类的具体功能请查阅相关的技术资料。

    一、实体集更新(DateEntityListUpdate)
          在前台设置一个实体的属性,我们在更新整个实体集到数据库的时候,并不知道哪些属性更改过,如果全部更新,将造成不必要的浪费,所以引入了这个概念。如果我们不这样做,模型类的每个属性set后将添加一句代码AddUpdateColumn。
          这里使用了.Net的消息链进行处理,因为实体类上还可能使用了其他的AOP。

    EntityListUpdatableAttribute类
    Code

    EntityListUpdatableProperty类
    Code

    EntityListUpdatableSink类
    Code

    二、延迟加载(LazyLoad)
         没有仔细研究过其他框架的延迟加载是怎么实现的,自己还是基于.Net的消息机制做了这个功能。

    LazyLoadableAttribute类
    Code

    LazyLoadableProperty类
    Code

    LazyLoadableSink类
    Code

          注意,innerData是在实体集加载的时候缓存的一个操作类型及连接串,以便在这里创建操作实体来进行数据读取。
          遗憾的是,对于Field目前没有能够加载出来。


          应用这两个AOP后的模型类没有太多的改动:
    Code

    前台调用代码没有改变:
    Code

          总结:使用继承ContextBoundObject感觉不爽,数据在经过这么多的Sink后,性能必定有所损耗,但配上分页,我想这样的不足可以有所弥补。

          声明:不要死里的盯着上面的代码,什么类不存在,我发这个的目的是阐述里面思想。
  • 相关阅读:
    线程安全及Python中的GIL
    八个我最常用的AS3开源类库(转)
    Mac 10.6与Win7 文件共享
    linux下erlang之OTP编译安装
    位图和矢量图区别
    让你的AIR程序脱离AIR环境运行
    outlook 0x80040201 错误
    NOSQL
    RLE压缩及优化图片压缩
    改正6种常见HTML5错误用法
  • 原文地址:https://www.cnblogs.com/faib/p/1570408.html
Copyright © 2011-2022 走看看