Start Date Release Date Release Versions PR link Tracking Link Stage Teams
2/12/2022
Accepted
  • Data

Simplify Schema Definition Service methods in Ember Data

Summary

This RFC is an amendment to the Custom Model Classes RFC (https://github.com/emberjs/rfcs/pull/487). Based on implementation feedback, we discovered we could simplify the arguments to attributesDefinitionFor and relationshipsDefinitionFor to drop the string argument and always pass in an object.

Motivation

When implementing a schema service, code ends up easier and cleaner if it does not have to deal with both a raw string and an object.

Detailed design

The original RFC proposed the following interface:

interface SchemaDefinitionService {
  // Following the existing RD implementation
  attributesDefinitionFor(identifier: RecordIdentifier | type: string): AttributesDefinition

  // Following the existing RD implementation
  relationshipsDefinitionFor(identifier: RecordIdentifier | type: string): RelationshipsDefinition
  doesTypeExist(type: string): boolean
}

We can simplify attributesDefinitionFor and relationshipsDefinitionFor methods to always accept an object.

interface SchemaDefinitionService {
  // Following the existing RD implementation
  attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesDefinition

  // Following the existing RD implementation
  relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsDefinition

  doesTypeExist(type: string): boolean
}

How we teach this

It simplifies the types passed in, so should be easier to teach.

Drawbacks

Alternatives

Keeping the existing design per the original RFC.