model view viewmodel. a brief introduction to a cleaner android architecture the mvp pattern web development design software development data science