объединение схемы проекта против плоских свойств - PullRequest
0 голосов
/ 29 января 2020

когда у меня есть родительский тип объекта, который должен указывать на дочерний тип объекта, но тип этого дочернего объекта может быть нескольких типов, и только один из них может быть выбран и заполнен. Я вижу 2 варианта, которые я могу сделать в отношении дизайна схемы graphql.

вариант 1 - использовать объединение

type child1{......}
type child2{......}
union chooseOne = child1 | child2
type parent{
         ref: chooseOne
}

вариант 2 использовать несколько реквизитов и иметь только один с данными - остальное с нулями

type child1{......}
type child2{......}
type parent{
     ref1: child1
     ref2: child2
}

есть ли третий вариант, о котором я не думаю? Я не то, пожалуйста, ни с одним. Я чувствую, что что-то упустил ... Кто-нибудь может прокомментировать? Спасибо! (отредактировано)

1 Ответ

0 голосов
/ 29 января 2020

мне не хватает третьего возможного варианта?

с использованием массива

type Meeting{
  .........(some properties)
  recurrences : [Recurrence]
}

union Recurrence = Once | WeeklyRecurrence | MonthlyRecurrence | DailyRecurrence

Конечно, это похоже на отношение ... и это .. и дает вам больше возможностей.

  • все они могут иметь validFrom и validUntil раз - вы можете отфильтровать все исторические записи автоматически без ручного отключения / удаления
  • вас вместо И может иметь комбинации И, например 'every working day at 10.00, additionally at 15.00 on fridays'
  • вы можете обрабатывать повторяющиеся записи отдельно, например, для уведомлений (имея идентификатор собрания, просто выбирайте участников из другого отношения)

Но на самом деле может быть, вам вообще не нужны отдельные типы повторений , только одно поле / свойство (перечислимые типы), чтобы знать, какие поля необходимы для рендеринга / forms / resolver / mutations et c.
. .. все они могут использовать одну и ту же таблицу БД, одинаковые структуры записей в обоих случаях (типы сопоставлены с полем enumed type).

Обновить

Я предпочитаю 2-й опция:

  • это м или читаемый / отлаживаемый
  • легче обрабатывать - if(ref1)...<Ref1Component data={ref1}/> ... передавая объект объединения данных у вас нет информации о типе!
  • союзы иногда приводят к таким неприятностям, как this
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...