gpt4 book ai didi

dependency-injection - DI容器,工厂或临时性元素的新容器?

转载 作者:行者123 更新时间:2023-12-04 03:47:02 26 4
gpt4 key购买 nike

当处理只需要在运行时知道数据的对象(例如用户名和密码)时,对象实例化应该在哪里发生:通过使用new,在工厂或在DI容器中进行?

例如,一旦获得数据,我就可以new一个对象:

UserCredentials creds =
new UserCredentials(dialog.getUsername(), dialog.getPassword());

或者,我可以使用工厂:
UserCredentials creds =
CredentialsFactory.create(dialog.getUsername(), dialog.getPassword());

或者,我可以在DI容器中使用提供程序(在这种情况下,它实际上是一个参数驱动的工厂)。 [省略示例代码。]

将DI容器用于如此简单的东西似乎都错了,但不充分使用它似乎也错了。

最佳答案

与往常一样,这取决于,但是作为一般规则,像第二种选择那样的静态工厂很少是一个好主意。

通过new设置UserCredential对象似乎是一个不错的选择,因为UserCredentials类看起来像一个独立的,具体的类,可以使用用户名和密码中的所有不变量来完全实例化该类。

在其他情况下,您要创建的类型本身可能表示一个抽象。在这种情况下,您不能使用new关键字,而必须使用抽象工厂

使用Abstract Factory通常非常有值(value),因为它使您可以结合运行时值和其他依赖项来组成实例。有关更多信息,请参见here

使用Abstract Factory还有助于单元测试,因为您可以简单地测试返回值或最终状态或您关心的任何内容与Abstract Factory的输出相关-为此,您可以轻松地提供测试Double ,因为这是...抽象。

关于dependency-injection - DI容器,工厂或临时性元素的新容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060767/

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