gpt4 book ai didi

php - 抽象工厂使用 "new"吗?

转载 作者:可可西里 更新时间:2023-11-01 12:37:46 25 4
gpt4 key购买 nike

我正在尝试尽可能多地使用依赖注入(inject),但是当涉及到诸如短期依赖之类的事情时,我遇到了麻烦。

例如,假设我有一个博客管理器对象,它想要生成它在数据库中找到的博客列表。执行此操作的选项(据我所知)是:

  1. 新博客();
  2. $this->loader->blog();
    • 加载器对象创建各种其他类型的对象,如数据库对象、文本过滤器等。
  3. $this->blogEntryFactory->create();

但是,#1 不好,因为它会产生强耦合。 #2 看起来仍然很糟糕,因为它意味着必须预先注入(inject)对象工厂 - 公开它可以创建的所有其他对象。

数字 3 似乎没问题,但如果我使用 #3,我是将“new”关键字放在 blogEntryFactory 本身中,还是将加载程序注入(inject) blogEntryFactory 并使用加载程序?

如果我有很多不同的工厂,比如 blogEntryFactory(例如,我可以有 userFactory 和 commentFactory),那么在所有这些不同的工厂中放置“new”关键字似乎会产生依赖性问题。

我希望这是有道理的...

注意

对于这个特定的博客示例,我已经得到了一些关于这如何不必要的答案,但实际上,在某些情况下您应该使用抽象工厂模式,这就是我要说的重点。在这种情况下,您是使用"new",还是做其他事情?

最佳答案

我不是专家,但我会尝试一下。这假设 Blog 只是一个数据模型对象,充当某些数据的容器并由 Controller 填充(new Blog 意义不大)。在这种情况下,Blog 是对象图的叶子,使用 new 是可以的。如果您要测试需要创建 Blog 的方法,无论如何都必须同时测试 Blog 的创建,使用模拟对象没有意义.. Blog 不会通过此方法持续存在。

举个例子,假设 PHP 没有数组结构,但有一个集合对象。您会调用 $this->collectionsFactory->create() 还是调用 new Array; 会感到满意?

关于php - 抽象工厂使用 "new"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com