通过继承实现 Laravel 公共服务

ack*_*hez 5 php inheritance laravel-5

题。

我有一堆使用特定服务集的控制器。我想知道是否有可能/正确地利用继承来避免我一直将它们注入控制器。这是我本来打算做的。

class MasterController extends controller{
    public function _construct(){
            $this->userData = App::make(UserService::class)
            $this->fooData = App::make(FooService::class)
    }
}

class UserController extends MasterController {
    public function __construct(BashService $bashService){
        parent::__construct();
        $this->bashData = $bashService;
    }

    public function someFunction(){
        $something = $this->userData->doUserSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?一个非常糟糕的主意吗?为什么或者为什么不?我认为这可能使我不必一次又一次地将公共服务注入控制器。

谢谢!

Sag*_*uja 2

问题:

我想知道是否有可能/正确地利用继承来使我不必一直将它们注入控制器中。

回答:

  1. 是的,这是可能的,并且利用继承是正确的,因为遵循这一点,您将保持控制器干净,这意味着您可以在控制器中拥有函数,但该函数将导致实现或从不同类继承的不同函数。

问题:

这是个好主意吗?

回答:

  1. 显然,这是一个好主意,正如我上面提到的,保持控制器清洁是可以遵循的最佳实践,因为您的方法将与业务逻辑分离,在业务逻辑中您实现所有的获取、发布和计算以及自从您的控制器是干净的,并且所有方法操作都从不同的类返回并具有准确的响应,例如(真或假)。

问题:

为什么或者为什么不?

回答:

  1. 由于我已经解释了大部分内容,我还想进一步向您建议存储库模式,所以基本上我所说的存储库这个词的意思是:

    • 源代码存储库是一种文件存档和网络托管设施,其中公开或私密地保存了大量软件或网页的源代码。它们经常被开源软件项目和其他多开发人员项目用来处理各种版本。

    在 Laravel 中,您可以遵循存储库模式来编码您的项目,这是当前发现的最佳实践。

    您也可以在 Laravel 存储库模式上进行谷歌搜索

    我有一个例子可以让你理解这一点。