The main reason we 'relay' these events through the app is so that our app modules stay as decoupled as possible. Ideally `CameraController` should be the only controller that touches `app.camera`. This approach is what has enabled use to 'lazy load' controllers in after the critical path. 

This approach prevents code tangle between modules and means you can just drop/plug modules into the app and they'll just start working.

Hope that makes sense :)