【问题标题】:Dojo store concept道场商店概念
【发布时间】:2012-05-02 15:58:48
【问题描述】:

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

我知道,Dojo Store 是为了取代 Dojo Data API,所以我会尝试使用新的 API。

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

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

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

【问题讨论】:

    标签: javascript html dojo


    【解决方案1】:

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

    • 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

    【讨论】:

      【解决方案2】:
      1. 为什么 Dojo 不提供 IndexedDB 存储?

        好问题。我不知道。

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

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

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

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

      【讨论】:

        【解决方案3】:

        http://dojotoolkit.org/reference-guide/1.8/dojo/store.html,直接说

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

        【讨论】:

        • 确实是的,但没有预期的dojo/store/IndexedDB!由于 IndexedDB 本身是如此“草稿”,因此可能正在进行工作而没有宣布? :)
        【解决方案4】:

        关于持久存储后端:

        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 本身不是关系数据库)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-18
          • 2018-10-06
          • 1970-01-01
          相关资源
          最近更新 更多