【问题标题】:Headless CMS - inheritance/polymorphism无头 CMS - 继承/多态
【发布时间】:2022-01-03 13:04:40
【问题描述】:

有谁知道为什么 Contentful(以及大多数其他无头 CMS 产品,如 GraphCMS)不支持接口继承,但是通过使用联合在字段级别的多态性概念似乎很有用,并且为不同的用例增加了价值?

有时了解类型并确保对象具有某些字段(接口继承)很重要,有时这并不重要,联合字段的多态性很有用。

还有其他解决方案/模型设计模式吗?

所以我想实现这个(在 GraphQL 层):

interface ContentItem {
  title: string;
}

type SpecificContentItemA implements ContentItem {
  body: string;
}

type SpecificContentItemB implements ContentItem {
  body: string;
}

type Space {
  items: ContentItem;
}

代替Contentful目前的功能:

type SpecificContentItemA {
  body: string;
}

type SpecificContentItemB {
  body: string;
}

type Space {
  items: SpecificContentItemA | SpecificContentItemB;
}

谢谢!

【问题讨论】:

    标签: graphql contentful headless-cms


    【解决方案1】:

    我会这样做的一种方法是创建三种内容类型:

    • 内容项
    • 特定内容项A
    • 具体内容项B

    然后我会在两个子类型中引用 ContentItem 以强制 ContentItem 中的所有字段都在子类型中。

    您可以在子类型中配置引用以将 ContentItem 显示为卡片。因此,您在浏览 SpecificContentItem 时会看到 ContentItem 的字段,而不仅仅是参考。



    但是,没有办法阻止用户创建 ContentItem 而不将其引用到子类型。这并不完美,但 Contentful 正在添加越来越多的功能。也许你可以问你的问题和社区论坛。

    【讨论】:

    • 坦克,我认为你的解决方案是组合而不是继承:specificContentItemA1 -> ref -> contentItem1 specificContentItemB1 -> ref -> contentItem2 但我真的想知道为什么大多数无头 CMS 不支持真正的继承,因为这可能非常有用。
    • 我很确定这会导致内容出现技术问题。
    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 2023-03-20
    • 2011-12-19
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多