取决于抽象而不是具体

时间:2018-08-26 16:33:26

标签: php dependency-injection structure

例如,我想写我的项目时不带任何框架,但要有现成的库,而不是为了重造自行车。

但是,当然,在项目演变过程中,我将编写自己的类,这些类可以移出项目,例如,它将是\Acme\Framework命名空间。我的具有域层的项目文件将放置在\Acme\ProjectName命名空间下。

因此,在这一点上,我想使用Symfony的HttpFoundation组件来处理http层。而且我需要将Request类注入控制器。但是SOLID原则说,类需要依赖于抽象而不是依赖。

这是否意味着我需要创建依赖于Symfony的\Acme\Framework\Request的类Request并使用它?或者,我可以按原样使用Symfony的Request

在这种情况下的最佳做法如何?

对不起,请问我的英语水平

1 个答案:

答案 0 :(得分:0)

这意味着您通常需要依赖通用接口。以HttpFoundation请求示例为例,您可以将其包装到PSR-7 adapter中,并使您的控制器接受Psr\Http\Message\ServerRequestInterface。现在,它不再依赖于Symfony的HttpFoundation的细节,并且能够(当然,需要付出额外的努力)与使用PSR HTTP消息接口的其他框架(例如Zend Expressive)一起工作(在这一点上还要更多)。