decouple view creation and updating