首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Om/Next中的归一化和标识

Om/Next中的归一化和标识
EN

Stack Overflow用户
提问于 2016-02-22 13:10:21
回答 1查看 285关注 0票数 3

我试图让我的头脑在正常化,并认为我正在取得进展,但我又绊倒了,我不确定我只是没有正确地思考问题。如何规范当前用户的消息?

代码语言:javascript
运行
复制
(def init-data
  {:session {:user/id 1
             :messages [{:message/id 1}]}
   :messages [{:message/id 1 :text "Message 1"}
              {:message/id 2 :text "Message 1"}]
   :users [{:user/id 1 :email "1@foo.com"}
           {:user/id 2 :email "2@foo.com"}]})

(defui Message
  static om/Ident
  (ident [this {:keys [message/id]}]
    [:message/by-id id])
  static om/IQuery
  (query [this]
    [:id]))

(defui User
  static om/Ident
  (ident [this {:keys [user/id]}]
         [:user/by-id id])
  static om/IQuery
  (query [this]
         `[:id {:properties ~(om/get-query Property)}]))

(defui Session
  static om/Ident
  (ident [this {:keys [user/id]}]
         [:user/by-id id])
  static om/IQuery
  (query [this]
         [:id]))

(defui RootView
  static om/IQuery
  (query [this]
    (let [message-query (om/get-query Message)
          user-query (om/get-query User)
          session-query (om/get-query Session)]
     `[{:messages ~message-query}
       {:users ~user-query}
       {:session ~session-query}])))

=> (def norm-data (om/tree->db RootView init-data true))
=> (pp/pprint norm-data)

{:session [:user/by-id 1],
 :messages [[:message/by-id 1] [:message/by-id 2]],
 :users [[:user/by-id 1] [:user/by-id 2]],
 :message/by-id
 {1 {:message/id 1, :text "Message 1"},
  2 {:message/id 2, :text "Message 1"}},
 :user/by-id
 {1 {:user/id 1, :email "1@foo.com", :messages [{:message/id 1}]},
  2 {:user/id 2, :email "2@foo.com"}},
 :om.next/tables #{:message/by-id :user/by-id}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 00:45:59

我稍微更改了您的初始数据,并设法使tree->db使我们采用一种看起来合理的默认数据库格式,在这种格式中,I无处不在:

代码语言:javascript
运行
复制
{:app/session [:session/by-id 1],
 :app/messages [[:message/by-id 100] [:message/by-id 101]],
 :app/users [[:user/by-id 200] [:user/by-id 201]],
 :message/by-id
            {100 {:id 100, :text "Message 1"}, 101 {:id 101, :text "Message 2"}},
 :user/by-id
            {200 {:id 200, :email "1@foo.com"},
             201 {:id 201, :email "2@foo.com"}},
 :session/by-id {1 {:id 1, :app/messages [[:message/by-id 100]]}}}

构成部分:

代码语言:javascript
运行
复制
(defui Message
  static om/Ident
  (ident [this {:keys [id]}]
    [:message/by-id id])
  static om/IQuery
  (query [this]
    [:id :text]))

(defui User
  static om/Ident
  (ident [this {:keys [id]}]
    [:user/by-id id])
  static om/IQuery
  (query [this]
    [:id :email]))

(defui Session
  static om/Ident
  (ident [this {:keys [id]}]
    [:session/by-id id])
  static om/IQuery
  (query [this]
    [:id {:app/messages (om/get-query Message)}]))

(defui RootView
  static om/IQuery
  (query [this]
    [{:app/messages (om/get-query Message)}
     {:app/users (om/get-query User)}
     {:app/session (om/get-query Session)}]))

以及初始数据(tree->db的输入):

代码语言:javascript
运行
复制
(def init-data
  {:app/session {:id 1
                 :app/messages [{:id 100}]}
   :app/messages [{:id 100 :text "Message 1"}
                  {:id 101 :text "Message 2"}]
   :app/users [{:id 200 :email "1@foo.com"}
               {:id 201 :email "2@foo.com"}]})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35554592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档