**Controller class**

    namespace App\Http\Controllers\Website\SportsType;
    use App\Classes\Contract\SportsType\ISportsType;
    use \App\Http\Requests\SportsType\SportsTypeRequest as SportsTypeRequest;
    class SportsTypeController extends \App\Http\Controllers\BaseController
    {
        private $AllSportsTypes = "SportsTypes";
        private $sportstype;
    
        public function __construct(ISportsType $_sportstype) {
            $this->sportstype = $_sportstype;
            parent::__construct();
        }
        
        public function index() {
            $SportsTypes = $this->sportstype->All();
            return view('SportsType.List')->with('SportsTypes', $SportsTypes);
        }
        
        public function create() {
            return view('SportsType.Create');
        }
        
        public function edit($SportsTypeID) {
            
            $SportsType = $this->sportstype->Get($SportsTypeID);
            return view('SportsType.Edit', array('SportsType' => $SportsType));
        }
        
        public function save(SportsTypeRequest $request) {
            $data = [
                'SportsType'    =>  $request['SportsType'],
                'SportsTypeID'  =>  $request['SportsTypeID'],
            ];
            $result = $this->sportstype->Save($data);
            return redirect()->route($this->AllSportsTypes);
        }
    }

**Business logic class**

    namespace App\Classes\BusinessLogic\SportsType;
    use App\Classes\DatabaseLayer\SportsType\SportsTypeDb;
    use App\Classes\Contract\SportsType\ISportsType;

    class SportsTypeBL implements ISportsType {       
        
        public function All() {
            $SportsTypes = (new SportsTypeDb())->All();
            return $SportsTypes;
        }
        
        public function Get($SportsTypeID) {
            $SportsType = (new SportsTypeDb())->Get($SportsTypeID);
            if($SportsType == null) {
                \App::abort(404);
                return;
            }
            return $SportsType;
        }
        
        public function Save($data) {
            return (new SportsTypeDb())->Save($data);
        }
    }

**Database class**

    namespace App\Classes\DatabaseLayer\SportsType;

    class SportsTypeDb {
        
        public function All() {
            $SportsTypes = \App\Models\SportsType\SportsTypeModel::all();
            return $SportsTypes;
        }
        
        public function Get($SportsTypeID) {
            $SportsType = \App\Models\SportsType\SportsTypeModel
                    ::where('SportsTypeID', $SportsTypeID)
                    ->first();
            return $SportsType;
        }
        
        public function Save($data) {
            if($data["SportsTypeID"] == 0) {
                $SportsType = new \App\Models\SportsType\SportsTypeModel();
            }
            else {
                $SportsType = $this->Get($data["SportsTypeID"]);
            }
            
            $SportsType->SportsType     = $data["SportsType"];
            $SportsType->save();
            return true;
        }
    }

1. Which class should have code for caching?
2. Am I writing bad or very bad code? Can you please suggest good ways to improve it?