Goals 1. Clean simple code 2. Separate the logic of the view and the model 3. Cache data on the client side – minimize AJAX calls 4. Provide clean interface to data so disparate view objects can work together on same data model 5. Maximize both model and view code reuse