es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sistema de gestión de contenido sin interfaz – herencia/polimorfismo

¿Alguien sabe por qué Contentful (y la mayoría de los otros productos CMS sin cabezal, como GraphCMS) no admiten la herencia por interfaz, pero el concepto de polimorfismo a nivel de campo mediante el uso de una unión parece ser útil y agregar valor para diferentes casos de uso?

A veces es importante saber el tipo y asegurarse de que el objeto tenga algunos campos (herencia de interfaz) y a veces no es importante y el polimorfismo por un campo de unión es útil.

¿Cualquier otra solución / patrón de diseño de modelo?

Entonces, quiero lograr esto (en la capa GraphQL):

interface ContentItem {
title: string;
}

type SpecificContentItemA implements ContentItem {
body: string;
}

type SpecificContentItemB implements ContentItem {
body: string;
}

type Space {
items: ContentItem;
}

En lugar de la característica actual de Contentful:

type SpecificContentItemA {
body: string;
}

type SpecificContentItemB {
body: string;
}

type Space {
items: SpecificContentItemA | SpecificContentItemB;
}

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Podría haber múltiples razones por las que Contentful y otros productos CMS sin cabeza no admiten herencia por interfaz. Una razón podría ser que agrega complejidad al sistema y lo hace más difícil de implementar y mantener. Otra razón podría ser que no se ajusta a los casos de uso de todos los clientes, ya que no todos los clientes pueden necesitar o querer la herencia de interfaces.

    En cambio, estos productos CMS ofrecen polimorfismo a nivel de campo mediante el uso de un tipo de unión, que permite a los clientes definir campos que pueden tener diferentes tipos. Este enfoque ofrece más flexibilidad y atiende a una gama más amplia de casos de uso.

    Sin embargo, hay algunas otras soluciones/patrones de diseño que podrían usarse para lograr la herencia de interfaz. Un enfoque posible es usar la composición en lugar de la herencia, donde los campos y propiedades comunes se definen en un tipo separado y luego se incluyen en los tipos específicos mediante una referencia. Esto puede ayudar a reducir la complejidad y mejorar la mantenibilidad.

    Otro enfoque podría ser el uso de escalares personalizados en GraphQL para representar diferentes tipos de campos. Esto puede ayudar a simplificar el esquema y hacer que sea más fácil de entender y usar.

    En última instancia, la elección de la solución/patrón de diseño dependería de los requisitos y limitaciones específicos del proyecto.

Comments are closed.