abstract controller classes

Signed-off-by: kentliau <kent.jr@me.com>