Как правильнее работать в сервисом, контрактом?

Помогите разобраться с контрактами (интерфейсами) и провайдерами.

Хочу сделать на их основе подгрузку каталога скажем брендов или скажем городов

Я делаю следующее

1) Создал контракт Contracts/Catalog.php
interface Catalog {
    public function show();
}


2) Создал два сервиса Services/Catalog/BrandService.php и Services/Catalog/CityService.php
class BrandService implements Catalog {
    public function show() {
        dd('Каталог брендов');
    }
}

class CityService implements Catalog {
    public function show() {
        dd('Каталог городов');
    }
}


И вот дальше у меня тупняк. Хотел создать общий контроллер Http/Controllers/CatalogController.php
class CatalogController extends Controller {
    function showBrand(BrandService $brand) {
      return $brand->show();
    }
   
   function showCity(CityService $city) {
      return $city->show();
    }
}


Но вроде как советуют для каждого сервиса создавать контроллер свой. И далее биндить их в провайдер.
Или может стоить создать общий сервис BaseCatalogController, который биндить через провайдер.

И ловить потом

Route::get('/catalog/city', [BaseCatalogController::class, 'city']);
Route::get('/catalog/brand', [BaseCatalogController::class, 'brand']);


Направьте, пожалуйста, на правильный подход в реализации :)
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 1
Вы странным образом используете интерфейсы.

Сначала опишите общий контроллер, исходя из требований которого сформируйте интерфейс, а потом уже занимайтесь его имплементацией.

А то выходит использование интерфейсов ради использования интерфейсов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы