Mimari
MimariStandart ve iç içe mutations için tek bir kod kaynağı kullanma

Standart ve iç içe mutations için tek bir kod kaynağı kullanma

GraphQL sunucusu 2 davranışı destekler:

  1. Varsayılan olarak mutations için standart davranış
  2. Tercihli olarak etkinleştirilen iç içe mutations

Sonuç olarak, varsayılan olarak QueryRoot ve MutationRoot tiplerini sunar ve iç içe mutations için tek bir Root tipine geçer.

Resolver'ları sağlarken, her çözüm için birer tane olmak üzere iki ayrı resolver sağlamak istemeyiz. Root alanlarını çözümlemek için kullanılan aynı resolver'ın QueryRoot ve MutationRoot alanlarını da çözümleyebilmesi daha iyidir.

Uygulama ayrıntıları

Sunucu, alanları çözümlemek için FieldResolver adlı bir nesne ve gerçek mutation'ı yürütmek için MutationResolver adlı bir nesne kullanır. Aynı MutationResolver nesnesi, farklı alanları uygulayan farklı FieldResolvers tarafından referans alınabilir; böylece kod yalnızca bir kez uygulanır ve SOLID yaklaşımını izleyerek birçok yerde kullanılır.

Bir alanın mutation olup olmadığını, FieldResolver'ın resolveFieldMutationResolverClass işlevi aracılığıyla o alan için bir MutationResolver nesnesi bildirip bildirmediğine bakarak anlarız.

Örneğin, Root.replyComment alanı AddCommentToCustomPostMutationResolver nesnesini sağlar. Bu aynı nesne, Comment.reply alanı tarafından da kullanılır.

Ayrıca, FieldResolver kodlanırken root alanlar yalnızca Root tipine eklenir. Standart GraphQL davranışı için sunucu bu yapılandırmayı alabilir ve bu alanları mutation olup olmadıklarına bağlı olarak otomatik olarak MutationRoot veya QueryRoot'a ekleyebilir.

Sonuç olarak, hem standart davranışı hem de iç içe mutations'ı destekleyen kod için tek bir kaynak kullandığımızdan, ek çaba harcamadan iç içe mutations içeren queries çalıştırabiliyoruz.