道场商店的概念

时间:2012-04-21 06:33:27

标签: javascript html5 dojo

我正在尝试深入了解Dojo Toolkit的数据/商店概念。

据我所知,Dojo Store将取代Dojo Data API,因此我将尝试使用新的API。

有两点让我想知道我是否理解了这个API背后的概念:

  • Dojo仅提供Memory Store和Json-REST Store。如果它基于IndexedDB API,为什么不提供IndexedDB存储?

  • 我还没有找到存储用于存储不同数据类型的示例。在SQL数据库中,您可能有不同的表,每个表都有一个ID列。我如何将这个概念映射到Dojo商店:我应该使用不同的商店来代表Person和Company(作为例子)吗?或者我应该在同一个商店?是否有任何指导方针?

4 个答案:

答案 0 :(得分:2)

使用商店时,我在所有对象上使用三个字段

  • id - 商店中所有商品唯一的ID。通常是类型和oid的组合。
  • _type - 标识实体“类型”的字符串值。即。人,公司。拥有此值可以查询商店并获取所有人员或公司。
  • oid - 对象id唯一标识同一类型的所有对象中的对象。即数据库ID

我发现我需要创建自己的Store API实现(扩展MemoryStore)。你可以在这里阅读更多相关信息:

http://swingingcode.blogspot.com/2012/03/dojo-implementing-viewmodelstore.html

我还谈到了用Java编写的引擎,它将java对象序列化为我的商店实现可以使用的格式。你可以在

上阅读

http://swingingcode.blogspot.com/2012/04/json-serialization-engine-part-i.html

http://swingingcode.blogspot.com/2012/04/json-serialization-engine-part-ii.html

答案 1 :(得分:2)

  1. 为什么Dojo不提供IndexedDB商店?

    好问题。我不知道。

  2. 我还没有找到存储用于存储不同数据类型的示例。我如何将这个概念映射到Dojo商店?

    Javascript是一种动态类型语言,因此先验不会阻止您在异构集合中存储多种数据类型。 Dojo商店API在这里特意模糊,以保持灵活性 - 我将其视为一系列广泛的指导方针,然后将其视为硬API。

    如果您使用内存存储,您当然可以添加具有不同模式的对象,但没有什么能阻止任何人制作某种更严格的对象存储并且每个存储只接受一种对象,类似于SQL表

    那就是说,我更喜欢让我的商店保持同质化,以避免混淆(我会为Person和Company设立单独的商店)。请记住,您存储的对象可能包含分层数据(子对象),因此如果您有1-N关系,则可以使用单个存储来存储父对象。

答案 2 :(得分:0)

<{3>}中的

,只需说明

  

dojo / store 旨在取代,集成并改进dojo / data API和dojox / storage API,并提供基于HTML5 / W3C的IndexedDB的简单,易于实现和扩展的API对象存储API。

答案 3 :(得分:0)

关于持久性商店后端:

dojo / store API只是一个API,主要用于提供&#34;规范&#34;其他Dojo / Dijit组件应该符合,并且您可以使用它来构建自己的商店。据我所知,没有计划在dojo核心内提供类似IndexedDB存储的东西。然而,Storehouse就是这样做的:提供一个IndexedDB存储并实现dojo / store API:

https://github.com/jensarps/storehouse

它可以使用与Dojo工具包相同的许可证,并且它受到Dojo Foundation的版权保护,因此使用许可证是安全的(我是Dojo贡献者并拥有CLA文件)。

关于一对二商店:

将每个dojo / store实例想象成一个表而不是数据库;在这种情况下,我建议为每种类型推荐一个商店,即一个&#34; personStore&#34;和&#34; companyStore&#34;并处理代码内部的关系(IndexedDB本身不是关系数据库)。