gpt4 book ai didi

java - 你会使用 DI 还是工厂?

转载 作者:行者123 更新时间:2023-11-30 06:00:02 25 4
gpt4 key购买 nike

我的应用程序存储文件,您可以选择将文件存储在您自己的服务器上或使用 S3。

我定义了一个接口(interface):

interface FileStorage {

}

然后我有 2 个实现,S3FileStorageLocalFileStorage

在控制面板中,管理员选择他们想要的 FileStorage 方法,并且该值存储在 SiteConfiguration 对象中。

由于FileStorage设置可以在应用程序运行时更改,您还会使用spring的DI来执行此操作吗?

或者您只是在代码中执行此操作:

FileStorage fs = null;

switch(siteConfig.FileStorageMethod)
case FileStorageMethod.S3:
fs = new S3FileStorage();

case FileStorageMethod.Local:
fs = new LocalFileStorage();

哪个更有意义?

我相信你可以在运行时将 DI 与 spring 结合使用,但目前我还没有读到太多相关内容。

最佳答案

我会注入(inject)一个工厂,并让客户端在运行时向它请求实际的服务。这会将您的客户端与实际工厂实现解耦,因此您也可以拥有多个工厂实现,例如用于测试。

您还可以使用某种背后有多种策略的代理对象来代替工厂,但如果无法提供来自一个客户端的一系列调用(例如用于文件存储的打开、写入、关闭),则可能会导致问题通过不同的实现。

关于java - 你会使用 DI 还是工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044087/

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