私は新しいフルスタックプロジェクトにGraphQLを採用しています。すでに多くの概念を研究しており、最初のプロジェクトを開始しました。宣言とプログラムによるGraphQL
私の質問は、宣言型とプログラム的にGraphQLスキーマ定義を使用することに関連しています。基本的に私はGraphQL official siteで見ることができるすべては、宣言的なアプローチを使用しています。でも、何とか複雑なデータ構造のため
type Brand {
name: String
logoUrl: String
}
enum Gender {
MALE
FEMALE
}
type Image {
thumbnailUrl: String
smallUrl: String
mediumUrl: String
largeUrl: String
}
type Article {
id: ID! # non-nullable, is guaranteed to exist on every article
name: String
thumbnailUrl: String
brand: Brand
genders: [Gender]
images: [Image]
recommendations: [Article]
}
type Query {
Article(id: ID!): Article
Articles: [Articles]
}
非常にきれいで、簡潔なコード:あなたは(this example hereのおかげで)のような、1つまたは複数のファイルにスキーマを定義します。
しかし、私はウェブ上でもI'veのようなもの、プログラム的にスキーマを構築するためのアプローチを使用研究本に見る例のほとんど:私の目標は、大規模なSaaSアプリケーションを構築することです
import { GraphQLObjectType, GraphQLInputObjectType } from 'graphql';
import {GraphQLNonNull, GraphQLID, GraphQLList } from 'graphql';
import { GraphQLString, GraphQLInt, GraphQLBoolean } from 'graphql';
import { UserType } from '../User/types';
import UserModel from '../../../models/User';
const fields = {
_id: {
type: new GraphQLNonNull(GraphQLID)
},
name: {
type: GraphQLString
},
phone: {
type: GraphQLString
}
};
const CompanyType = new GraphQLObjectType({
name: 'Company',
description: 'Company',
fields: fields
})
const Company = {
type: CompanyType,
description: 'Get single company',
args: {
id: {
name: 'id',
type: new GraphQLNonNull(GraphQLID)
}
},
resolve(root, params) {
params.deleted = false;
return CompanyModel.find(params).exec();
}
}
const Companies = {
type: new GraphQLList(CompanyType),
description: 'Get all companies',
resolve(root) {
const companies = CompanyModel.find({ deleted: false }).exec();
if (!companies) {
throw new Error('Error getting companies.')
}
return companies;
}
}
export default {
Company,
Companies
}
、スキーマはかなり複雑になり、私の心配はコードがかなりすぐに複雑になるということです。
したがって、宣言的アプローチ、プログラム的アプローチ、または2つの組み合わせが必要ですか?
ここでのベストプラクティスは何ですか?