Можем ли мы иметь два или более классов в контроллере Laravel - PullRequest
0 голосов
/ 05 марта 2019

Учитывая принцип сегрегации интерфейса, который является одним из наиболее обсуждаемых принципов объектно-ориентированного программирования - принципы SOLID, мне было интересно, возможно ли иметь два разных класса в одном контроллере Laravel?Например:

  <?php

    namespace ...;

    use App\Http\Controllers\Controller;

    interface VehicleInterface
    {
      public function ...
    }

    class CarController extends Controller implements VehicleInterface
    {
       ...
    }

    class ElectricCar implements VehicleInterface
    { 
       ...
    }

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

В этом вопросе есть как минимум две проблемы:

  1. Я не думаю, что ElectricCar и CarController должны использовать один и тот же интерфейс.ElectricCar моделирует автомобиль, возможно, с помощью таких методов, как accelerateTo(120mph), тогда как CarController может иметь такие методы, как accelerateCarTo(Car5, 120mph).Они также используются с другим значением: ElectricCar моделирует один автомобиль, тогда как CarController управляет доступом к одному или нескольким автомобилям, который также вызывается из абстрактной конструкции, моделирующей поток приложения.

  2. Принцип сегрегации интерфейса не говорит о классах, поэтому вопрос в первую очередь некорректен. Принцип разделения интерфейсов гласит, что один интерфейс (!), Задающий несколько вариантов использования , должен быть разбит на несколько интерфейсов (!), Называемых ролями интерфейсов , каждый из которых точно соответствуетодин вариант использования.Например, интерфейс, моделирующий ATM с помощью таких методов, как deposit() и withdraw(), должен быть разбит на два интерфейса, каждый из которых выполняет только одну из этих функций.Цель состоит в том, чтобы зависимый объект должен использовать только те части, которые ему действительно нужны.

0 голосов
/ 05 марта 2019

Технически, вы можете иметь несколько классов в одном файле.

С Laravel (или любой структурой), не совсем, если вы хотите использовать его автозагрузчик, так как classname = filename является соглашением.

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

...