separate view from model