abstract mvp components