Model-View-ViewModel pattern implementation and abstraction layer