The Model-View-ViewModel pattern