zoukankan      html  css  js  c++  java
  • smartjs 0.3 DataManager 发布&介绍

    0.3版加入了DataManager,基于策略的数据管理模块;是SmartJS中比较重要的一个系列。整个个DataManager模块包括有:dataManager,dataPolicyManager,dataServices三个管理对象;

      1.dataManager(以下简称dm)

      数据管理的核心引擎;定义了一系列的接口和方法,不能直接使用,必须创建出具体类型的数据管理才能使用。引擎主要提供了存、取两个动作和内外两个通道;内置了基础的策略;过滤条件解析器;

      可以定义针对不同类型的数据管理,如:object,table,tree;通过定制策略可以简单的实现各种数据交互;比如:数据懒加载,定时更新,数据同步等等;

      2.dataServices(以下简称ds)

      数据服务管理;定义了数据服务的接口和通用操作方法;不能直接使用,必须创建具体类型的数据服务;

      数据服务的定义就比较广了,可以是具体的对象方式locaStorage,IndexDB,或者是一些行为ajax,comet,websocket;也可以是根据业务规则定义的rest,cache等;

      3.dataPolicyManager

      数据策略管理;为dataManager服务,提供注册策略点以及应用到dataManager的方法;这个需要对dm实现和流程比较了解才能注册策略点,不用太多关注。


      感觉这样介绍也很难理解,下面我们先来看一张DataManager的数据交互图:

      

      

      分析一下该图,首先Active去向dm请求数据,dm判断是否需要向ds请求(判断基于设定的策略)。如果不请求,则直接返回dm内部响应的结果。

      如果需要向DataServices请求,则发送请求,然后ds将响应的数据响应给dm,在由dm返回结果。

      在来看一下DataManager具体的执行图:

      

      呵呵,初看应该是有点晕的,画的不够清晰。

      图中以获取数据的动作,详细描述了执行主流程(还有一些策略影响的流程没体现),用数字标示了执行流程顺序:

      1. 获取动作进入第一个策略点check get way,判断从什么地方获取数据,默认的auto,先从dm取,取不到在从ds取;ds则是只从ds取;dm则是只在dm内部取;

      2. 通过第一个策略点后会从dm根据过滤条件取到数据

      3. 当第一个策略点的结果为ds时,则直接进入3,同时不会进入2,4,5,6四个流程;直接进入7 get数据服务管理

      4. 在2中取到数据以后,进入判断数据是否为空的策略点;不为空则进入流程5;为空的话,进入流程6

      5. 返回结果,结束流程

      6. 如果为空数据时,则进入进入7 get数据服务管理

      7. 由3,6进入到此阶段,首先会根据配置的获取ds信息,这里是配置了ds1和ds2; 先向ds1请求数据

      8. 返回ds1的查询结果,进入结果判断;为空的时候,进入9,否则进入12;这里demo中设定为空所以进入9

      9. 回到get数据服务管理,读取ds2的配置信息,进入10

      10. 向ds2请求数据

      11. 返回ds2的的结果

      12. 进入是否需要更新的策略点判断,不需要更新进入13;需要更新进入14

      13. 返回结果,结束流程

      14. 将返回的数据更新到dm内部;

      15. 进入判断是否更新到ds的策略点,不更新则进入16;更新进入17

      16. 返回结果,结束流程

      17. 判断是否是等待ds同步,如果等待,进入19(等待表示需要到ds更新数据之后才返回结果)。不等待先返回结果18.

      18. 返回结果,但并不结束流程。进入19.

      19. 进入set数据服务管理器。这里也定义两个ds1和ds2。分别会异步的发出20 ds1和21 ds2的更新请求。

      22. 当所有ds更新完成后,返回结果,结束流程。

      大体流程就介绍到这。下一篇会结合场景和代码来说明DataManager.

      

  • 相关阅读:
    算法练习(16)-水平翻转一颗二叉树
    算法练习(15)-设计1个二叉树的序列化与反序列化实现?
    算法练习(14)-二叉树中2个节点的最近公共祖先?
    算法练习(13)-打印纸条对折的折痕类型(凹痕?凸痕?)
    算法练习(12)-二叉树的递归套路
    算法练习(11)-二叉树的各种遍历
    算法练习(10)-求2个(可能有环的)单链表的相交节点
    算法练习(9)-复杂带随机指针的单链表
    mac升级后第三方下载程序无法打开cannot be opened because the developer cannot be verified的解决办法
    算法练习(8)-判断单链表是否回文链表
  • 原文地址:https://www.cnblogs.com/zhh8077/p/3801599.html
Copyright © 2011-2022 走看看