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后,性能必定有所损耗,但配上分页,我想这样的不足可以有所弥补。

          声明:不要死里的盯着上面的代码,什么类不存在,我发这个的目的是阐述里面思想。
  • 相关阅读:
    Hadoop 最讨厌的报错:运行VirtualBox提示0x00000000错误“0x00000000指令引用的0x00000000内存该内存不能为written?
    linux下面/usr/local和opt目录有何区别
    Hadoop是不是必须在linux上运行?(根本原因是操作系统Linux的权限开放优势)
    Hadoop主要配置文件的作用
    RPC模式
    Hadoop安装最后一步~Hadoop伪分布式配置
    word 使用中遇到的小细节(按空格键后面字不见;从编译器粘贴的代码出现乱码,word标题内容折叠效果实现)
    在VS Code下配置Julia
    使用pandas读取csv文件和写入文件
    ModuleNotFoundError: No module named 'sklearn.cross_validation'
  • 原文地址:https://www.cnblogs.com/faib/p/1570408.html
Copyright © 2011-2022 走看看