JCR / Sling-包含一个JSON值的Node属性是否有意义,还是应该创建相应的子节点?

时间:2018-12-21 03:30:15

标签: aem cq5 sling jcr

我正在开发一个相当简单的AEM组件,但是我仍然无法理解最佳实践。

例如,假设我要存储一组Link个对象,每个对象都包含一个 href title 属性。

这可以通过2种方式存储:

[1] 每个链接都作为一个单独的节点:

 component
    ├── link_1
    │   ├── .href  = "#1"
    │   └── .title = "T1"
    └── link_2
        ├── .href  = "#2" 
        └── .title = "T2"

[2] 作为component下的JSONArray属性:

 component
    └── .links = [{"href":"#1", "title":"T1"}, {"href":"#2", "title":"T2"}]

写完这些之后,我想我回答了我自己的问题...

即使选项 [2] 对组件开发很有吸引力,但是当JCR / Sling数据建模已经提供了该层次结构时,这似乎是多余的。


  • 我正确理解了吗?

  • 我知道可以将Resource导出为JSON,但是可以从JSON导入/创建SyntheticResource吗?

    • 否则,何时使用SyntheticResource
  • 我最好将link节点存储在一个单独的单独的用于组织的父节点下吗?

component └── links ├── link_1 │   ├── .href = "#1" │   └── .title = "T1" └── link_2 ├── .href = "#2" └── .title = "T2"

1 个答案:

答案 0 :(得分:5)

我建议在jcr中创建节点。存储为json可能会禁止您使用jcr / aem提供的许多功能(或使它们复杂化),例如索引,搜索,事件处理,访问控制等。

尽管您的示例很简单,并且上面列出的某些内容可能不适用,但是如果有人将更复杂的数据存储为json,则会产生问题。