move abstract and interface to Model
fix provider path
use more generic class name