考虑到接口隔离原理,它是面向对象编程中最“被谈论”的原理之一-SOLID原理,我想知道单个Laravel控制器中是否可以有两个不同的类?例如:
<?php
namespace ...;
use App\Http\Controllers\Controller;
interface VehicleInterface
{
public function ...
}
class CarController extends Controller implements VehicleInterface
{
...
}
class ElectricCar implements VehicleInterface
{
...
}
答案 0 :(得分:6)
从技术上讲,您可以在同一文件中拥有多个类。
对于Laravel(或任何框架),不是真的,如果要使用其自动加载器,因为惯例是classname = filename。
此外,控制器负责处理请求。您可以在控制器函数中加载不同类的尽可能多的实例。但是,完全不应该在控制器文件中定义其他类。
答案 1 :(得分:3)
这个问题至少有两个问题:
我认为ElectricCar
和CarController
不应共享相同的接口。 ElectricCar
可能使用accelerateTo(120mph)
之类的方法对汽车进行建模,而CarController
可能具有accelerateCarTo(Car5, 120mph)
之类的方法。它们的使用也有不同的含义:ElectricCar
为一辆汽车建模,而CarController
管理对一辆或多辆汽车的访问,这也从对应用程序流程建模的抽象构造中调用。 / p>
接口隔离原则不涉及类,因此问题首先是形式不正确的。 接口隔离原则规定,指定多个用例的一个接口(!)应分解为多个接口,称为角色接口,(!),每个都可以满足一个用例。例如,使用deposit()
和withdraw()
之类的方法对ATM进行建模的接口应分为两个接口,每个接口仅满足这些功能之一。目标是从属实体只能使用并查看其真正需要的部分。