我们可以在Laravel控制器中有两个或更多类

问题描述 投票:4回答:2

考虑到接口隔离原理,这是面向对象编程 - SOLID原则中最“谈论”的原则之一,我想知道是否有可能在一个Laravel控制器中有两个不同的类?例如:

  <?php

    namespace ...;

    use App\Http\Controllers\Controller;

    interface VehicleInterface
    {
      public function ...
    }

    class CarController extends Controller implements VehicleInterface
    {
       ...
    }

    class ElectricCar implements VehicleInterface
    { 
       ...
    }
php laravel laravel-5.2 solid-principles
2个回答
5
投票

从技术上讲,您可以在同一个文件中拥有多个类。

使用Laravel(或任何框架),不是真的,如果你想使用它的自动加载器,因为classname = filename是惯例。

此外,控制器处理请求。您可以在控制器函数中加载不同类的任意数量的实例。但是在控制器文件中定义其他类并不是你应该做的。


3
投票

这个问题至少有两个问题:

  1. 我不认为ElectricCarCarController应该共享相同的界面。 ElectricCar模拟汽车,可能使用像accelerateTo(120mph)这样的方法,而CarController可能有类似accelerateCarTo(Car5, 120mph)的方法。它们也被用于不同的含义:ElectricCar模拟一辆车,而CarController管理对单个或多个车辆的访问,这也是从模拟应用程序流的抽象构造中调用的。
  2. 界面隔离原则不涉及类,因此问题首先是不正确的。接口隔离原则说,指定多个用例的一个接口(!)应该分解为多个接口(!),称为角色接口,每个接口只能完成一个用例。例如,使用deposit()withdraw()等方法对ATM建模的接口应该分成两个接口,每个接口只满足其中一个功能。目标是依赖实体必须仅使用并查看它真正需要的部分。
© www.soinside.com 2019 - 2024. All rights reserved.