abstract controller
abstract model