Improve view architecture

Adds base classes and interfaces to elements of the view that
need to be replicated.
Improve controller architecture

Adds base classes and interfaces to elements of the controller that
need to be replicated.