Understanding the difference between MVC, MVP and MVVM design patterns