Model-View-ViewModel (MVVM) design pattern