2016-07-31 5 views
0

Я читал Redux Without Profanity и автор говорит следующее:Что такое «декларативная загрузка данных» в отношении Falcor, GraphQL и Resolver?

Тенденция к декларативной загрузке данных способствует этой модели, в основном как это легче работать. Новые структуры React, такие как Falcor, GraphQL и Resolver также автоматически обрабатывают пакетные и дедупные запросы. Также можно реализовать, используя простые действия Redux, объединенные с автоматическим управлением.

Автор использует «декларативную загрузку данных» несколько небрежно, поэтому я предположил, что это должен быть широко известный и чрезвычайно очевидный термин. Однако я искал ее и не нашел много. К сожалению, автор считает это очевидным предварительным знанием. Пожалуйста помоги!

Может ли кто-нибудь дать краткое объяснение и пример сопоставления «декларативной загрузки данных» и вашей средней базы данных HTTP/ajax, скажем, простого списка списка задач MEAN?

ответ

1

Основополагающее различие между декларативной загрузкой данных и загрузкой данных http/ajax основано на различии между декларативным и императивным программированием. С декларативным подходом вы просто указываете , что вам нужно, и все. На руке, с императивным подходом, вам также нужно сообщить шаги, то есть , как, чтобы получить то, что вам нужно.

Давайте посмотрим на следующее example of Relay's declarative data loading. Он сообщает, что для каждой фракции он хочет получить эти данные: id, factionId, имя, корабли, а также данные AddShipMutation хочет для фракции. Как извлечение данных является абстрактным.

fragments: { 
    factions:() => Relay.QL` 
    fragment on Faction @relay(plural: true) { 
     id, 
     factionId, 
     name, 
     ships(first: 10) { 
     edges { 
      node { 
      id 
      ${StarWarsShip.getFragment('ship')} 
      } 
     } 
     } 
     ${AddShipMutation.getFragment('faction')}, 
    } 
    `, 
}, 

Для загрузки данных через HTTP или AJAX мы должны указать, как получить данные.

  1. с просьбой об
  2. получить ответ
  3. извлечения данных из ответа
  4. хранить данные

Надеются, что это помогает!

+0

Спасибо, Ахмад. Кажется, «большая» разница заключается в том, что у вас нет «разбора/извлечения» между запросом и хранением? Вы по-прежнему отправляете запрос, и вам все равно нужно получить ответ и сохранить его. Вам просто не нужно разбирать ответ, потому что он уже вам нужен? Это связано с тем, что «запрос» и «извлечение данных» (в некотором смысле) в одном большом блоке (например, запрос graphQL) ... и ответ не нуждается в извлечении, он просто готов войти в реквизит или в хранилище ? –

+0

На самом деле большая разница заключается в том, что при декларативной загрузке данных разработчикам не нужно беспокоиться о том, какой запрос делать и как выполняется запрос. Мы просто «заявляем», какие данные мы хотим. За сценой определяется требуемый запрос; по-прежнему отправляется запрос, полученный ответ и анализируется. –

+0

Запрос GraphQL не является одним большим блоком запроса и извлечения данных. Он не знает, какой запрос сделать и как сделать запрос. Запрос GraphQL только выражает, какие данные нужны. Возможно, вам будет легче понять это в контексте клиентской стороны. [Relay.js] (https://github.com/facebook/relay) - это графическая платформа, совместимая с графикой.Теперь Relay абстрагирует сложность всей связи с сервером GraphQL, то есть Relay будет выполнять запрос GraphQL и делать все возможное, чтобы извлечь нужные данные. –