我正在尝试尽可能多地使用依赖注入,但是当涉及到诸如短期依赖的事情时,我遇到了麻烦。
例如,假设我有一个blog manager对象,它希望生成在数据库中找到的blog列表。这样做的选项(据我所知)是:
新古典主义;
$this->加载程序->blog();
loader对象创建各种其他类型的对象,如数据库对象、文本过滤器等。
$this->blogentryfactory->create();
然而,1是不好的,因为它创建了一个强耦合。#2仍然看起来很糟糕,因为它意味着对象工厂必须预先注入-公开它可以创建的所有其他对象。
第3个似乎没问题,但是如果我使用3,我是将“new”关键字放入blogentryfactory本身,还是将加载程序注入blogentryfactory并使用加载程序?
如果我有许多不同的工厂,比如blogentryfactory(例如,我可以有userfactory和commentfactory),那么将“new”关键字放在所有这些不同的工厂上似乎会产生依赖性问题。
我希望这有道理…
注释
对于这个特定的blog示例,我已经得到了一些关于这是如何不必要的答案,但实际上,有些情况下,您应该使用抽象工厂模式,这就是我要说的重点。在那种情况下你是用“new”还是做别的什么?

最佳答案

我不是专家,但我要试一试。这假设Blog只是一个数据模型对象,充当某些数据的容器,并由控制器填充(new Blog不是很有意义)。在本例中,Blog是对象图的叶子,使用new是可以的。如果要测试需要创建Blog的方法,那么无论如何,必须同时测试Blog的创建,并且使用模拟对象没有意义。Blog不会持续超过此方法。
例如,假设php没有数组构造,但是有一个collections对象。您是打电话给$this->collectionsFactory->create()还是满意地说new Array;

07-24 18:41
查看更多