关闭

Javascript设计模式-数据访问对象模式

标签: 数据存储javascript设计模式本地存储
81人阅读 评论(0) 收藏 举报
分类:

/*
* 本地存储类
* 参数preId 本地数据存储库前缀
* 参数timeSign 时间戳与存储数据之间的拼接符
*
*/
var BaseLocalStorege=function(preId,timeSign){
//定义本地存储数据库前缀
this.preId=preId;
//定义时间戳与存储数据之间的拼接符
this.timeSign=timeSign||’|-|’;
}
//本地存储类 原型方法
BaseLocalStorege.prototype={
//操作状态
status:{
Success:0,//成功
FaiLure:1,//失败
OverFlow:2,//溢出
TimeOut:3//过期
},
//保存本地存储连接
storage:localStorage||window.localStorage,
//保存本地存储数据库数据真实字段
getKey:function(key){
return this.preId+key;
},
//添加(修改)数据
/*
* 参数key:数据字段标识
* 参数value:数据值
* 参数callback:回调函数
* 参数time:添加时间
*/
set:function(key,value,callback,time){

//默认操作状态时成功
var status=this.status.Success,
//获取真实字段
key=this.getKey(key);
try{
    time=new Date(time).getTime()||time.getTime();
}catch(e){
    //TODO handle the exception
    //为传入时间参数或者时间参数有误获取默认时间:一个月
    time=new Date().getTime()+1000*60*60*24*31;
}
try{
    //向数据库中添加数据
    this.storage.setItem(key,time,+this.timeSign+value);
}catch(e){
    //溢出失败,返回溢出状态
    //TODO handle the exceptionOverFlow
    status=this.status.OverFlow;
}
//有回调函数则执行回调函数并传入参数操作状态,真实数据字段标识以及存储数据值
callback&&callback.call(this,status,key,value);

},
/*
* 添加(修改)数据
* 参数key :数据字段标识
* 参数callback:回调函数
*/
get:function(key,callback){
//默认操作状态时成功
var status=this.status.Success,
//获取
key=this.getKey(key),
//默认值为空
value=null,
//时间戳与存储数据之间的拼接符长度
timeSignLen=this.timeSign.length,
//缓存当前对象
that=this,
//时间戳与存储数据之间的拼接符起始位置
index,
//时间戳
time,
//最终获取的数据
result;
try{
//获取字段对应的数据字符串
value=that.storage.getItem(key);
}catch(e){
//TODO handle the exception
//获取失败,则返回失败状态,数据结果为null
result={
status:that.status.FaiLure,
value:null
};
callback&&callback.call(this,result.status,result.value);
return result;
}
//如果成功获取数据字符串
if (value) {
//获取时间戳与存储数据之间的拼接符起始位置
index=value.indexOf(that.timeSign);
//获取时间戳
time=+value.slice(0,index);
//如果时间过期
if (new Date(time).getTime()>new Date().getTime()||time==0) {
//获取数据结果(拼接符后面的字符串)
value =value.slice(index+timeSignLen);
}else{
//过期则结果为null
value =null;
//设置状态过期为过期状态
status=that.status.TimeOut;
//删除该字段
that.remove(key);
}
}else{
//未获取数据字符串状态为失败状态
status=that.status.FaiLure;
}
//设置结果
result={
status:status,
value:value
};
//执行回调函数
callback&&callback.call(this,result.status,result.value)
},
/*
* 删除数据
* 参数key:数据字段标识
* 参数 callback:回调函数
*/
remove:function(key,callback){
//设置默认初始状态为失败
var status=this.status.FaiLure,
key=this.getKey(key),
//设置默认数据结果为空
value=null;
try{
//获取字段对应的数据
value=this.storage.getItems(key);
}catch(e){
//TODO handle the exception
//如果数据存在
if (value) {
try{
//删除数据
this.storage.removeItem(key);
//设置操作成功
status=this.status.Success;
}catch(e){
//TODO handle the exception
}
}
//执行回调 注意传入回调函数中的数据值:如果操作状态成功则返回真实的数据结果,否则返回空
callback&&callback.call(this,status,status>0?null:value.slice(value.indexOf(this.timeSign)+this.timeSign.length))
return callback;
}
}
}

var LS=new BaseLocalStorege('LS_');
        //在数据库中创建a变量 然后删除两次 查看结果
        LS.set('a','xiaoming',function(){console.log(arguments);});//[0,"LS_a","xiaoming"]
        LS.get('a',function(){console.log('get'+arguments)});//[0,"xiaoming"]
        LS.remove('a',function(){console.log('removeOne'+arguments)});//[0,"xiaoming"]
        LS.remove('a',function(){console.log('removeTwo'+arguments)});//[1,null]
        LS.get('a',function(){console.log('getTwo'+arguments)});//[1,null]
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

设计模式总结之Visitor Pattern(访问者模式)

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  • cooldragon
  • cooldragon
  • 2016-08-12 12:10
  • 3777

Javascript 设计模式 单例

一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法。 1、单例模式的写法 单例模式写法相当简单: var singleTon = { m1: "memeber ...
  • lmj623565791
  • lmj623565791
  • 2014-06-13 16:09
  • 16060

设计模式学习之访问者模式

访问者模式,是行为型设计模式之一。访问者模式是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是...
  • u012124438
  • u012124438
  • 2017-04-23 22:15
  • 6398

JavaScript设计模式(三) 数据访问对象模式

大部分网站会将一些数据(如:用户Token)存储在前端,用来实现页面间的传值,对于一些大型Web应用来说,其存储的数据可能会非常多,数据的管理会变得复杂,并且一个大型项目是由多位程序员共同开发的,这时...
  • ZKH_101
  • ZKH_101
  • 2017-07-31 01:42
  • 239

DAO(Data Access Object ,数据访问对象)设计模式

DAO(Data Access Object ,数据访问对象)的主要功能是数据操作
  • cxc19890214
  • cxc19890214
  • 2014-09-04 14:46
  • 700

PHP设计模式-数据访问对象模式

在PHP开发中,我们经常会与数据库打交道(本例中以mysql为例),尤其是一些数据库的增删改查操作,是经常要用到的。假定,我们有一个mysql数据库,有服务器名$host, 数据库用户名$user, ...
  • u013588608
  • u013588608
  • 2014-02-02 16:01
  • 614

设计模式知识连载(39)---数据访问对象模式---本地存储DAO

设计模式知识连载(39)---数据访问对象模式: 抽象和封装对数据源的访问和存储,DAO通过对数据源链接的管理方便对数据的访问与存储 /** * 案例一:本地存储,方式一...
  • yuzhiboyouzhu
  • yuzhiboyouzhu
  • 2017-12-31 13:20
  • 14

设计模式【数据访问对象模式DataAccessObjectPattern】

数据访问对象模式 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与...
  • qiaoquan3
  • qiaoquan3
  • 2017-11-23 14:40
  • 62

设计模式知识连载(39)---数据访问对象模式---MongoDB

设计模式知识连载(39)---数据访问对象模式: 抽象和封装对数据源的访问和存储,DAO通过对数据源链接的管理方便对数据的访问与存储 /** * 案例二:MongoDB,...
  • yuzhiboyouzhu
  • yuzhiboyouzhu
  • 2017-12-31 13:21
  • 28

PHP设计模式之适配器模式,建造者模式,数据访问对象模式

设计模式的目的是帮助我们以便于重用的方式来设计解决方案。 1.适配器模式Adapter class errorObject  //这个类用来存储错误信息 { private $__error;...
  • nightkidzxc
  • nightkidzxc
  • 2011-12-06 11:41
  • 199
    个人资料
    • 访问:429次
    • 积分:33
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档