php - 依赖抽象,而不是具体
问题描述
例如,我想在没有任何框架但使用现成库的情况下编写我的项目,而不是重新发明自行车。
但当然,在项目的发展过程中,我会编写自己的类,这些类可以移出项目,例如\Acme\Framework
命名空间。我的带有域层的项目文件将放在\Acme\ProjectName
命名空间下。
所以此时我想使用 Symfony 的HttpFoundation
组件来处理 http 层。我需要将Request
类注入控制器。但是 SOLID 原则说类需要依赖于抽象而不是具体。
这是否意味着我需要创建\Acme\Framework\Request
依赖于 Symfony 的类Request
并使用它?或者我可以按原样使用 Symfony 的Request
。
在这种情况下,最佳实践如何?
请原谅我的英语,如果它伤害了你
解决方案
这意味着您通常需要依赖通用接口。以您的 HttpFoundation 请求为例,您可以将其包装到PSR-7 适配器中并让您的控制器接受Psr\Http\Message\ServerRequestInterface
。现在它不依赖于 Symfony 的 HttpFoundation 的具体细节,并且能够与使用 PSR HTTP 消息接口的其他框架一起工作(当然需要一些额外的努力),比如 Zend Expressive(此时肯定还有更多)。
推荐阅读
- android - 本机基本按钮在 Android 上未正确显示
- elasticsearch - 什么类型最适合弹性搜索“关键字”(如主题标签)字段?
- android - 为什么我的内容未在 Android 模拟器中显示
- magento - Magento2如何在主页的图像滑块中上传图像?
- ruby-on-rails - ruby rails视图不渲染
- python - 尝试使用 Django 时出现 ImportError
- wordpress - 未呈现 Wordpress 自定义帖子类型存档页面模板
- excel - 我希望我的 vba 代码在经过一定时间后锁定我的工作表
- python - 我对 models.py 的更改未反映在管理门户中
- c# - 使移动方法在保持范围内变为无限