added abstract classes for model and controller