abstract CRUD methods