首页 > 解决方案 > 依赖抽象,而不是具体

问题描述

例如,我想在没有任何框架但使用现成库的情况下编写我的项目,而不是重新发明自行车。

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

所以此时我想使用 Symfony 的HttpFoundation组件来处理 http 层。我需要将Request类注入控制器。但是 SOLID 原则说类需要依赖于抽象而不是具体。

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

在这种情况下,最佳实践如何?

请原谅我的英语,如果它伤害了你

标签: phpdependency-injectionstructure

解决方案


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


推荐阅读