Data Down, Actions Up

The term Data Down, Actions Up (DDAU) describes a common pattern found in Ember applications which emphasizes unidirectional data flow. The term describes the practice of passing data, e.g. in form of an Ember Data record or a plain JSON object, from one part of the app which “owns” the data down to other application layers. In Ember apps the data owner will oftentimes be a Controller or a Route, but it could also be a data loading Component; on the other hand the recipient of passed down data is oftentimes another sub route or Component.

The data recipient might have access to said to data to, for example, present it in the UI, but in DDAU it will never modify that data directly. Instead, with DDAU a component will only have access to one or several actions: callbacks which can be triggered through the component to modify data indirectly. These actions are passed down from the data owner and they will be invoked on the very same parent layer they originate from.

This - at first - sounds a bit cumbersome. Why would you not want to modify the data directly where it is used and instead decide to pass down both data and callbacks for modifying that data to modify said data to another or potentially several layers of routes and components? What are the benefits of DDAU?

The advantages of DDAU:

  • DDAU helps with a clearer separation of concerns

  • DDAU helps with component reusability

  • DDAU helps to avoid complex data loops

Last updated