Architectuur
ArchitectuurÉén broncode gebruiken voor standaard en geneste mutaties

Één broncode gebruiken voor standaard en geneste mutaties

De GraphQL-server ondersteunt 2 gedragingen:

  1. Het standaardgedrag voor mutaties, standaard ingeschakeld
  2. Geneste mutaties, als opt-in

Als gevolg hiervan worden standaard de types QueryRoot en MutationRoot blootgesteld, en wordt er voor geneste mutaties overgeschakeld naar het blootstellen van één enkel Root-type.

Bij het aanleveren van de resolvers wil je niet twee resolvers aanleveren, één voor elke oplossing. Het is beter dat dezelfde resolver die wordt gebruikt om velden voor Root op te lossen, ook velden van QueryRoot en MutationRoot kan oplossen.

Implementatiedetails

De server gebruikt een object genaamd FieldResolver om velden op te lossen, en een object genaamd MutationResolver om de eigenlijke mutatie uit te voeren. Hetzelfde MutationResolver-object kan worden aangehaald door verschillende FieldResolver-objecten die verschillende velden implementeren, zodat de code slechts één keer wordt geïmplementeerd en op veel plaatsen wordt gebruikt, conform de SOLID-aanpak.

We weten of een veld een mutatie is als de FieldResolver een MutationResolver-object declareert voor dat veld, gedaan via de functie resolveFieldMutationResolverClass.

Zo levert het veld Root.replyComment het object AddCommentToCustomPostMutationResolver. Datzelfde object wordt ook gebruikt door het veld Comment.reply.

Bovendien worden bij het coderen van de FieldResolver de root-velden uitsluitend toegevoegd aan het Root-type. Voor het standaard GraphQL-gedrag kan de server deze configuratie ophalen en deze velden automatisch toevoegen aan MutationRoot of QueryRoot, afhankelijk van of ze mutaties zijn of niet.

Als resultaat kunnen we, omdat we één broncode gebruiken die zowel het standaardgedrag als geneste mutaties aandrijft, queries uitvoeren met geneste mutaties zonder extra inspanning.