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

时间:2019-03-05 07:45:46

标签: php laravel laravel-5.2 solid-principles

考虑到接口隔离原理,它是面向对象编程中最“被谈论”的原理之一-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 :(得分:6)

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

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

此外,控制器负责处理请求。您可以在控制器函数中加载不同类的尽可能多的实例。但是,完全不应该在控制器文件中定义其他类。

答案 1 :(得分:3)

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

  1. 我认为ElectricCarCarController不应共享相同的接口。 ElectricCar可能使用accelerateTo(120mph)之类的方法对汽车进行建模,而CarController可能具有accelerateCarTo(Car5, 120mph)之类的方法。它们的使用也有不同的含义:ElectricCar为一辆汽车建模,而CarController管理对一辆或多辆汽车的访问,这也从对应用程序流程建模的抽象构造中调用。 / p>

  2. 接口隔离原则不涉及类,因此问题首先是形式不正确的。 接口隔离原则规定,指定多个用例的一个接口(!)应分解为多个接口,称为角色接口,(!),每个都可以满足一个用例。例如,使用deposit()withdraw()之类的方法对ATM进行建模的接口应分为两个接口,每个接口仅满足这些功能之一。目标是从属实体只能使用并查看其真正需要的部分。