• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
老杨随笔-重用与重构的艺术
专注于RIA架构设计,无止境的重构,无限制的重用
博客园    首页    新随笔    联系   管理    订阅  订阅

Dappers 开发入门 (5) - 缓存

Dappers内部定义了3个重要的Info对象: MappingInfo, StatementInfo, QueryInfo

  • MappingInfo对应了一个Domain实体对象,描述了 类/表 , 属性/列名 映射关系。 自动的sql语句创建也是基于 MappingInfo. Select , MappingInfo.Update, MappingInfo.Delete, MappingInfo.Insert 。根据主键, 属性的Attribute描述,可以指定某些属性不映射到列, 可以指定某些属性仅可Insert不可Update等。
  • StatementInfo对应了类myBatis 的sql配置的每一个key-value。它将value解析为 Sql、DynamicCriterias。 执行语句时,只需动态遍历参数,即可确定当前有效的Criteria,从而构建完整sql语句。 internal class Criteria
        {
            public bool? IsOr { get; set; }
            public bool IsInClause { get; set; } 
            public string[] Cons { get; set; }
            public string ParamName { get; set; }
            public string Criterion { get; set; }
        }
  •  QueryInfo是一个查询请求的封装:QueryInfo.MappingType, QueryInfo.Sql, QueryInfo.Parameters,QueryInfo.Wheres, QueryInfo.OrderBy. 同时还有分页信息: QueryInfo.StartRecord, QueryInfo.PageSize,QueryInfo.TotalCount , 以及返回结果集: QueryInfo.List
默认设置下,每当请求首次涉及MappingInfo、StatementInfo时, 才会创建该对象。并自动加入LRU缓存池。 任何30分钟没有再次访问、Info总量超过200条时, 都会移除最少访问的记录。

 

编辑页缓存:

    通常一个列表,都可以链接、弹出响应的明细编辑界面。通常,每次载入不同的行,明细界面载入不同的数据:

  • iframe重新载入图片、脚本、html资源,重新渲染生成界面
  • 执行初始脚本,初始化Datepicker, comboBox,comboTree 等的数据载入
  • 载入数据,并逐一设置控件值

 

  所以这里对window做了处理: 初次打开window之后, 这个iframe创建;窗口关闭,iframe的div隐藏即可。 再次打开窗口,检测url是否一致,一致则直接弹出该frame,并根据额外参数,除非frame载入数据:

WIN.open({title:gridview.title,
            url:gridview.editUrl,
            param:'Id='+id,
            id:EDITOR_ID,
            width:gridview.editWidth,
            height:gridview.editHeight,
            maximized:gridview.editMaximized,
            maximizable:gridview.editMaximizable,
            modal:true

        }); 

可见,页面载入不再是: test.aspx?Id=0001 的方式, 而是

    1.页面载入 test.aspx ,

    2.载入后立即执行 loadData('Id=0001') ,以ajax的方式载入数据。 

当Id变成 0002 的时候,

    1. 弹出window

    2.loadData('Id=0002' ) ,载入数据。

 

当列表页面关闭时,列表的关闭事件自动清理所关联的window。从而实现窗体的缓存与过期。 

这种缓存方式,在GIS地图展示时效果尤其明显: 每次重新地位, 地图瞬间打开,并动画的方式移动地图切换到新的坐标点。不会出现地图界面载入困难, 局部区域空白再逐步载入等问题, 大大提高了体验效果。

 

 

posted @ 2012-04-10 11:35  craboYang  阅读(2869)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3