posts - 94, comments - 346, trackbacks - 10, articles - 0
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
在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后,性能必定有所损耗,但配上分页,我想这样的不足可以有所弥补。

      声明:不要死里的盯着上面的代码,什么类不存在,我发这个的目的是阐述里面思想。