Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
围绕具有类似类型的对象设计graphql模式的最佳方法是什么?_Graphql - Fatal编程技术网

围绕具有类似类型的对象设计graphql模式的最佳方法是什么?

围绕具有类似类型的对象设计graphql模式的最佳方法是什么?,graphql,Graphql,我有一个类似的问题:除了graphql模式。我希望有一些实现graphql经验的人能够帮助我权衡以下方法的利弊 假设我有两个类似的业务对象,轿车和皮卡,它们具有以下属性 轿车 制造 模型 重量 价格 拾取 制造 模型 重量 价格 床长 拖航能力 尽管某些类型不适用于轿车,但创建名为车辆的通用类型并赋予其所有属性是否更有意义 type Vehicle { make model weight price bed_length towing_ca

我有一个类似的问题:除了graphql模式。我希望有一些实现graphql经验的人能够帮助我权衡以下方法的利弊

假设我有两个类似的业务对象,轿车和皮卡,它们具有以下属性

轿车

  • 制造
  • 模型
  • 重量
  • 价格
拾取

  • 制造
  • 模型
  • 重量
  • 价格
  • 床长
  • 拖航能力
尽管某些类型不适用于轿车,但创建名为车辆的通用类型并赋予其所有属性是否更有意义

type Vehicle {
    make
    model
    weight
    price
    bed_length
    towing_capacity
}
或者最好将每种类型划分为各自不同的类型,如:

type Sedan {
    make
    model
    weight
    price
}
type Pickup {
    make
    model
    weight
    price
    bed_length
    towing_capacity
}

或者,有没有更好的方法来处理这些类似的对象,这些对象只有几个不同的属性?

是,您可以定义一个通用类型
车辆
,但我建议只使用通用属性,而不是将所有属性限制在基本模型中-这是一种设计类的糟糕方法。如果有更多具体类型(或将来添加),例如轿车、皮卡车、卡车、SUV等,您会怎么做。。是否要添加此基本车辆对象中的所有字段?这可能会在以后给您带来问题

最好的方法是在可以使用所有公共字段/属性定义基本接口类型的地方使用,该接口类型可以由其他具体的GraphQL类型实现

让我举例说明:

将基本/i面类型车辆定义为:

interface Vehicle {
    make: String
    model: String
    weight: String
    price: Int
}
现在,将实现车辆接口的具体类型轿车皮卡及其自身的非通用属性定义为:

通过这种方式定义对象类型可以在数据字段投影方面提供更大的灵活性。这意味着,在查询此对象类型时,您可以灵活地查询
Vehicle
中存在的公共字段以及属于子对象类型(实现
Vehicle
type)的其他字段


谢谢那正是我想要的。
type Sedan implements Vehicle {
    make: String
    model: String
    weight: String
    price: Int
    other_info: String
}

type Pickup implements Vehicle {
    make: String
    model: String
    weight: String
    price: Int
    bed_length: Int
    towing_capacity: Int
}
query VehiclesList {
  vehicles {
    make
    model
    weight
    price
    ... on Sedan {
       other_info
   }
    ... on Pickup {
      bed_length
      towing_capacity
    }
  }
}