components now have a model and view