Deprecate Usage of Ember Evented in Ember Data
Summary
Ember.Evented functionality on DS.Model, DS.ManyArray,
DS.Errors, DS.RecordArray, and DS.PromiseManyArray will be
deprecated and eventually removed in a future release. This includes
the following methods from the
Ember.Evented
class: has, off, on, one, and trigger. Additionally the
following lifecycle methods on DS.Model will also be deprecated:
becameError, becameInvalid, didCreate, didDelete, didLoad,
didUpdate, ready, rolledBack.
Motivation
The use of Ember.Evented is mostly a legacy from the pre 1.0 days of
Ember Data when events were a core part of the Ember Data programming
model. Today there are better ways to do everything that once needed
events. Removing the usage of the Ember.Evented mixin will make it
easier for Ember Data to eventually transition to using native ES2015
JavaScript classes and will reduce the surface area of APIs that Ember
Data must support in the long term.
Detailed design
Ember.Evented mixin will be scheduled to be removed from the
following classes in a future Ember Data release: DS.Model,
DS.ManyArray, DS.Errors, DS.RecordArray, and
DS.PromiseManyArray.
The has, off, on, one, and trigger methods will be trigger a
deprecation warning when called and will be completly in a future
Ember Data release.
A special deprecation will be logged when users of a
DS.adapterPopulatedRecordArray attempt to listen to the didLoad
event. This depecations will prompt users to use a computed property
instead of the didLoad event.
DS.Model will also recieve deprecation warnings when a model is
defined with the following methods: becameError, becameInvalid,
didCreate, didDelete, didLoad, didUpdate, ready,
rolledBack.
When a model is instantiated for the first time with any of these methods a deprecation warning will be logged notifiying the user that this method will be deprecated and the user should use an computed or overide the model's init method instead.
How we teach this
Today we do not teach the use of any of the Ember Data lifecycle events in the guides. They are referenced in the API docs but they will be updated to mark the APIs as deprecated and show alternative examples of how to achieve the same functionality using a non event pattern.
The deprecation guide app will be updated with examples showing how to migrate away from an evented pattern to using a computed or imperative method to achieve the same results.
Drawbacks
The drawback to making this change is existing code that takes advantage of the Ember Data lifecycle events will need to be updated to use a different pattern.
Alternatives
We could leave the Ember.Evented mixin on all of the Ember Data
objects that currently support it and continue to support this
interface for the foreseeable future. However, Ember Data itself
doesn't require these events internally. There is only one place in
the DS.Error code that takes advantage of the Ember.Evented system
and that code can be easilly re-written to avoid Ember.Evented APIs.
Unresolved questions
None