separate view rendering concern from model