4

我正在尝试深入研究 Dojo Toolkit 的数据/存储概念。

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

有两点让我怀疑我是否理解了这个 API 背后的概念:

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

  • 我还没有找到使用商店存储不同数据类型的示例。在 SQL 数据库中,您可能有不同的表,每个表都有一个 ID 列。我如何将这个概念映射到 Dojo 商店:我是否应该使用不同的商店来表示个人和公司(例如)?还是我应该在同一家店里买两个?因此有什么指导方针吗?

4

4 回答 4

2
  1. 为什么 Dojo 不提供 IndexedDB 存储?

    好问题。我不知道。

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

    Javascript 是一种动态类型语言,因此事先没有什么可以阻止您在异构集合中存储多种数据类型。Dojo store API 在这里故意模糊以保持灵活性——我将其更多地视为一套广泛的指导方针,而不是一个硬 API。

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

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

于 2012-04-23T14:04:16.337 回答
2

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

  • id - 在商店中的所有商品中唯一的 id。一般是type和oid的组合。
  • _type - 标识实体“类型”的字符串值。IE。人,公司。拥有此值提供了查询商店并获取所有人员或公司的能力。
  • 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

于 2012-04-21T12:06:07.197 回答
0

关于持久存储后端:

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

https://github.com/jensarps/storehouse

它与 Dojo 工具包在相同的许可下可用,并且它的版权归 Dojo 基金会所有,因此可以安全地使用许可(我是 Dojo 贡献者并且有一个 CLA 存档)。

关于一店二店:

将每个 dojo/store 实例视为一个表而不是数据库;在这种情况下,我会为每种类型推荐一个存储,即“personStore”和“companyStore”,并处理代码内部的关系(IndexedDB 本身不是关系数据库)。

于 2013-04-16T16:41:51.337 回答
0

http://dojotoolkit.org/reference-guide/1.8/dojo/store.html中,只要说

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

于 2012-08-31T08:20:58.353 回答