Witam serdecznie

Mam taki kod (Laravel 7):

Controller:

class PageController extends Controller
{

   protected $repository;

   public function __construct(PageRepository $repository)
   {
       $this->repository = $repository;
   }

   public function index()
   {
       return view('cms.page.list');
   }


   public function create()
   {
       return view('cms.page.view');
   }


   public function store(PageCreateRequest $request)
   {
       $data = [
           'title' => $request->input('title'),
           'description' => $request->input('description') ?? $request->input('title'),
           'keywords' => $request->input('keywords') ?? $request->input('title'),
           'content' => $request->input('content'),
           'enable' => $request->input('enable') ?? 0,
       ];
       $this->repository->create($data);
       return redirect()->route('page.index')->with('success', 'Nowy rekord zapisany poprawnie');
   }


   public function edit(int $id)
   {
       return view('cms.page.view', ['page' => $this->repository->getModel($id), 'fileCount' => 5, 'fileFolder' => 'DZ_TEXT_PAGE', 'fileId' => $id]);
   }


   public function update(PageUpdateRequest $request, int $id)
   {
       $data = [
           'title' => $request->input('title'),
           'description' => $request->input('description'),
           'keywords' => $request->input('keywords'),
           'content' => $request->input('content'),
           'enable' => $request->input('enable') ?? 0,
       ];
       $this->repository->update($data, $id);
       return redirect()->route('page.index')->with('success', 'Zmiany zapisane pomyślnie');
   }


   public function destroy(Request $request, int $id, DropZoneService $dropZoneService)
   {
       $fileList = $dropZoneService->getFilesList($id, 'products');
       foreach ($fileList as $key => $value) {
           $dropZoneService->removeDropZoneFile($id, 'products', $value->id);
       }
       $this->repository->delete($id);
       return redirect()->route('page.index')->with('success', 'Rekord usunięty poprawnie');
   }

   public function dataTable(Request $request)
   {
       if ($request->ajax()) {
           return Datatables::of($this->repository->getAll())
               ->addIndexColumn()
               ->editColumn('enable', function ($row) {
                   if ($row->enable == 1)
                       return '<span class="btn btn-block btn-info btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"><i class="far fa-smile-beam pr-lg-1 d-inline-block d-lg-inline"></i><span class="d-none d-xl-inline">Aktywny</span> </span>';
                   else return '<span class="btn btn-block btn-secondary btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"> <i class="far fa-frown pr-lg-1 d-inline-block d-lg-inline"></i><span class="d-none d-xl-inline">Nieaktywny</span> </span>';

               })
               ->editColumn('title', function ($row) {
                   return Str::limit($row->title, 80, '...');
               })
               ->editColumn('title', function ($row) {
                   return '<a href="' . route('page.edit', ['id' => $row->id]) . '">' . $row->title . '</a>';
               })
               ->addColumn('action', function ($row) {
                   $btn = '<a href="' . route('page.edit', ['id' => $row->id]) . '" class="btn btn-block btn-warning btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"><i class="far fa-edit pr-lg-1 d-inline-block d-lg-inline"></i></a> ';
                   $btn .= '<a href="' . route('page.destroy', ['id' => $row->id]) . '" class="btn btn-block btn-danger btn-sm text-white d-sm-inline py-sm-2"><i class="far fa-trash-alt  pr-lg-1 d-inline-block d-lg-inline"></i></a> ';

                   return $btn;
               })
               ->rawColumns(['title', 'action', 'enable'])
               ->make(true);
       }
   }

Page Repository:

class PageRepository
{
 
    public function __construct(Page $model)
    {
        $this->model = $model;
    }
 
    /**
     * @param string $slug
     * @return mixed
     */
    public function getTextPageFromSlug(string $slug)
    {
        return $this->model->active()->where('slug', $slug)->first();
    }
 
    public function getAll()
    {
        return $this->model->all();
    }
 
    public function create(array $data)
    {
        $this->model->create($data);
    }
 
    public function update(array $data, int $id)
    {
        $record = $this->model->findOrFail($id);
        $record->title = $data['title'];
        $record->description = $data['description'];
        $record->keywords = $data['keywords'];
        $record->content = $data['content'];
        $record->enable = $data['enable'] ?? 0;
        $record->save();
    }
 
    public function delete(int $id)
    {
        $record = $this->model->findOrFail($id);
        $record->delete();
    }
 
    public function getModel($id)
    {
        return $this->model->findOrFail($id);
    }
 
}

Controller:

class PageController extends Controller
{
 
    protected $repository;
 
    public function __construct(PageRepository $repository)
    {
        $this->repository = $repository;
    }
 
    public function index()
    {
        return view('cms.page.list');
    }
 
 
    public function create()
    {
        return view('cms.page.view');
    }
 
 
    public function store(PageCreateRequest $request)
    {
        $data = [
            'title' => $request->input('title'),
            'description' => $request->input('description') ?? $request->input('title'),
            'keywords' => $request->input('keywords') ?? $request->input('title'),
            'content' => $request->input('content'),
            'enable' => $request->input('enable') ?? 0,
        ];
        $this->repository->create($data);
        return redirect()->route('page.index')->with('success', 'Nowy rekord zapisany poprawnie');
    }
 
 
    public function edit(int $id)
    {
        return view('cms.page.view', ['page' => $this->repository->getModel($id), 'fileCount' => 5, 'fileFolder' => 'DZ_TEXT_PAGE', 'fileId' => $id]);
    }
 
 
    public function update(PageUpdateRequest $request, int $id)
    {
        $data = [
            'title' => $request->input('title'),
            'description' => $request->input('description'),
            'keywords' => $request->input('keywords'),
            'content' => $request->input('content'),
            'enable' => $request->input('enable') ?? 0,
        ];
        $this->repository->update($data, $id);
        return redirect()->route('page.index')->with('success', 'Zmiany zapisane pomyślnie');
    }
 
 
    public function destroy(Request $request, int $id, DropZoneService $dropZoneService)
    {
        $fileList = $dropZoneService->getFilesList($id, 'products');
        foreach ($fileList as $key => $value) {
            $dropZoneService->removeDropZoneFile($id, 'products', $value->id);
        }
        $this->repository->delete($id);
        return redirect()->route('page.index')->with('success', 'Rekord usunięty poprawnie');
    }
 
    public function dataTable(Request $request)
    {
        if ($request->ajax()) {
            return Datatables::of($this->repository->getAll())
                ->addIndexColumn()
                ->editColumn('enable', function ($row) {
                    if ($row->enable == 1)
                        return '<span class="btn btn-block btn-info btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"><i class="far fa-smile-beam pr-lg-1 d-inline-block d-lg-inline"></i><span class="d-none d-xl-inline">Aktywny</span> </span>';
                    else return '<span class="btn btn-block btn-secondary btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"> <i class="far fa-frown pr-lg-1 d-inline-block d-lg-inline"></i><span class="d-none d-xl-inline">Nieaktywny</span> </span>';
 
                })
                ->editColumn('title', function ($row) {
                    return Str::limit($row->title, 80, '...');
                })
                ->editColumn('title', function ($row) {
                    return '<a href="' . route('page.edit', ['id' => $row->id]) . '">' . $row->title . '</a>';
                })
                ->addColumn('action', function ($row) {
                    $btn = '<a href="' . route('page.edit', ['id' => $row->id]) . '" class="btn btn-block btn-warning btn-sm text-white d-sm-inline mr-md-1 mr-sm-1 py-sm-2"><i class="far fa-edit pr-lg-1 d-inline-block d-lg-inline"></i></a> ';
                    $btn .= '<a href="' . route('page.destroy', ['id' => $row->id]) . '" class="btn btn-block btn-danger btn-sm text-white d-sm-inline py-sm-2"><i class="far fa-trash-alt  pr-lg-1 d-inline-block d-lg-inline"></i></a> ';
 
                    return $btn;
                })
                ->rawColumns(['title', 'action', 'enable'])
                ->make(true);
        }
    }

Page Repository:

class PageRepository
{
 
    public function __construct(Page $model)
    {
        $this->model = $model;
    }
 
    /**
     * @param string $slug
     * @return mixed
     */
    public function getTextPageFromSlug(string $slug)
    {
        return $this->model->active()->where('slug', $slug)->first();
    }
 
    public function getAll()
    {
        return $this->model->all();
    }
 
    public function create(array $data)
    {
        $this->model->create($data);
    }
 
    public function update(array $data, int $id)
    {
        $record = $this->model->findOrFail($id);
        $record->title = $data['title'];
        $record->description = $data['description'];
        $record->keywords = $data['keywords'];
        $record->content = $data['content'];
        $record->enable = $data['enable'] ?? 0;
        $record->save();
    }
 
    public function delete(int $id)
    {
        $record = $this->model->findOrFail($id);
        $record->delete();
    }
 
    public function getModel($id)
    {
        return $this->model->findOrFail($id);
    }
 
}

(Controller + repositorium). Nie korzystam w projekcie z Repository Pattern: https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/?utm_source=prettus-l5-repository&utm_medium=readme&utm_campaign=prettus-l5

Wydzieliłem sobie tylko funkcje związane z bazami danych do osobnego Pliku (Page Repository). Czy takie podejście jest dobre (dobre praktyki programowania)?
Czy lepiej te funkcje z PageRepository przenieść do Modelu?

Czytałem troszkę w internecie, i z tego co widzę to ludzie zalecają PageRepository - a w momencie gdy controller robi się zbyt "duży" to dodatkowo serwisy.

Czy mógłbym prosić o opinie? :)