首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否应该避免使用新关键字以支持另一种模式(例如工厂)?

是否应该避免使用新关键字以支持另一种模式(例如工厂)?
EN

Stack Overflow用户
提问于 2017-05-19 19:58:20
回答 1查看 317关注 0票数 1

来自谷歌清洁代码谈判的这段视频表示,new不利于测试,乍一看似乎是可信的。

什么是PHP的好实践?我是否应该创建一个工厂类来为每个对象类型实例化不同的对象类型,从而允许松散耦合?还是通用初始化方法(自动加载程序)?使用单一的插入方法,new实例更合适,尽管后者没有指定返回类型,这使得IDE的代码完成处于黑暗之中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-19 20:23:56

井。录像是对的。每当代码的一部分中包含new时,就会使测试变得更加困难。基本上,没有办法将您正在测试的东西与该类隔离开来。这意味着您需要对这个类( new语句中的那个类)有一个完整的覆盖,这样您的单元测试才能真正可靠。

绝对最好的选择是将所有实例作为依赖项传递(无论是在类中还是在方法中),但通常只能在特定的层中工作。例如,如果编写正确,那么将控制器从任何new语句中删除是非常简单的。您只需将服务作为构造函数中的依赖项传递,并在“动作调用”中传递Request抽象或显式值。

因此,传递依赖项(可能通过使用某个DI容器)是最好的方法。也是最容易测试的。但这并不是普遍存在的。

您的其余代码可能会以new操作符和工厂的混合(至少部分)结束。

您可以通过在工厂中使用::class和添加docblock注释来缓解IDE相关问题:

代码语言:javascript
复制
/** @var \Mapper\SalesSomething\Invoice $invoice */
$invoice = $this->factory->create(Invoice::class);

我个人的喜好是:

  • 控制器:相关对象仅作为依赖项通过DIC
  • 服务:映射器工厂,作为依赖项的存储库,带有new的域实体
  • 映射程序:仅依赖于构造函数
  • 实体:不依赖
  • 视图:相关对象仅作为依赖项通过DIC
  • 表示对象/小部件:通过工厂

但这只是我的方法

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44078131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档