Skip to content

GraphQlQueryParameter<T> and QueryBuilderParameter<T> design questions #131

@gao-artur

Description

@gao-artur

Hi. I have a few questions regarding GraphQlQueryParameter<T> and QueryBuilderParameter<T> design.
The first one is used to create the parametrized query (WithParameter method). The second is to provide an inline arguments value or parameter name (With{FIELD} methods).

  1. GraphQlQueryParameter<T> has a few constructors. When using
public GraphQlQueryParameter(string name, string graphQlTypeName = null)

I expect the nullability to be inferred from the T nullability, including respecting the NRT if enabled. But instead, it always creates nullable arguments. For example, Int instead of Int!. It also seems to have a bug in the following line because ? shouldn't be appended to the graphql type name:

var nullableSuffix = nullableUnderlyingType == null ? null : "?";

So, my question is if there is any reason why this constructor won't be able to infer the nullability from the T?

  1. There is an additional constructor.
public GraphQlQueryParameter(string name, T defaultValue, bool isNullable = true)

That allows to define the nullability manually, but T defaultValue is required in this constructor. Any reason why I can't override the nullability without specifying the default value?

  1. The QueryBuilderParameter<T> doesn't have public constructors. This forces me to use GraphQlQueryParameter<T> and provide redundant parameters like graphql type name or isNullable and enforces validations that are not relevant here. I understand that I can reuse an instance that was passed into WithParameter but it makes the API "less fluent". I also understand that adding a public constructor with a single argument for a parameter name will create ambiguity with a private constructor when T is string, but maybe design can be changed slightly to allow simple creation of the QueryBuilderParameter<T> instance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions