abstract controller architecture