separation of view and logic