更好地设计使用HTML5 localStorage存储的数据

时间:2013-10-31 22:35:46

标签: javascript local-storage

我在我的网络应用程序上有一个场景,我想知道如何更好地设计它。

我必须介绍我的应用程序:收集和分析。 当收集发生时,用户需要随时了解此收集正在进行,并且与分析相同。系统还显示用户执行的最后10次收集和分析。

当用户与系统交互时,正在进行的收集和分析(以及最后的收集/分析)会不断变化。因此,在考虑了存储这些信息的不同方式以便正确显示它们之后,因为它们非常动态,我选择使用HTML5的 localStorage ,而我正在使用JavaScript完成所有工作。

以下是它们的存储方式:

  • 正在进行的集合:(由名为addItem的函数设置,接收ITEMNAME)

    • 键:c_ITEMNAME_Storage

    • 值:c_ITEMNAME

  • 收集完成或错误:(由名为editItem的函数设置,该函数也接收ITEMNAME并更改相应密钥的值)

    • 键:c_ITEMNAME_Storage

    • 值:c_Finished_ITEMNAME或c_Error_ITEMNAME

  • 最后10个集合中的集合(由名为addItemLastCollections的函数设置,该函数接收ITEMNAME并使用当前日期和时间准备密钥)

    • Key:ORDERNUMBER_c_ITEMNAME_DATE_TIME

    • 值:c_ITEMNAME

注意:订单号从0到9,当每个集合完成时,它会收到数字0.同时,当调用addItemLastCollections函数时,将删除数字9。

对于分析几乎是一样的,唯一改变的是“c”变成“a”。

无论如何,我猜你理解这个想法,但如果有什么不清楚,请告诉我。

我想要的是其他方法的意见和建议,因为我认为这种效率低且不切实际,即使它工作正常。我想要一些容易维护的东西我认为坚持使用localStorage可能是最好的,但不是这样。我对JavaScript中的设计模式的使用不是很熟悉,尽管我在Java中经常使用它们中的一些。如果有人能帮我一把,那就太好了。

修改: 我甚至有点难以解释为什么我觉得它效率低下。我想主要的原因是因为每个案例(进度,完成,错误,最后集合)我必须调用一个方法并修改字符串(添加下划线和更多信息),并让我访问任何数据(比方说,我需要测试每一个的名称或日期,看看它是哪种情况,然后继续使用拆分(_)。我知道这不是很简单,但我想这整个方法可以更好地设计。由于我在这部分软件上独自工作,我没有任何人可以与之讨论,所以我认为这里是交流思想的好地方:)

提前致谢!

1 个答案:

答案 0 :(得分:2)

不确定您要找的是什么。通常我只使用localStorage来存储适合我的应用程序的字符串化版本的对象。我没有为localStore中的每个变量设置各种不同的键,而是将我的对象的字符串化版本转储到localStorage中的一个键中。这样,数据是相同的结构,无论它是来自服务器作为JSON还是我从本地拉出来。

您可以使用JSON.stringify(object)和JSON.parse('store from store')快速保存或检索深层嵌套的对象/数组;

实施例: 我的应用程序对象从服务器发送为JSON(我意识到这不是正确引用的JSON)

var data={ foo: {bar:[1,2,3], baz:[4,5,6,7]},
  foo2: {bar:[1,2,3], baz:[4,5,6,7]}
}
saveObjLocal( 'app_analysis', data);

function saveObjLocal( key, obj){
   localStorage.set( key, JSON.stringify(obj)
}

function getlocalObj( key){
   return JSON.parse( localStorage.get(key) );
}

var analysisObj= =getlocalObj('app_analysis');
alert( analysisObj.foo.bar[2])