language-agnostic - 注入(inject)很少使用的服务 - 构造函数与方法

标签 language-agnostic dependency-injection

这个问题是关于基于主要值(value)对象和服务的可测试软件设计。

下面是一个简单服务的 API 示例,该服务可以将数据保存到文件中。

saveToFile(data, fileName)
saveToUniqueFile(data, fileNameGenerator)

fileNameGenerator 是一项生成随机文件名的服务。它用于查找保存数据的唯一文件名。在此示例中,fileNameGenerator 作为方法参数注入(inject)。

替代方案之一是构造函数注入(inject),它可以简化 API:

saveToFile(data, fileName)
saveToUniqueFile(data)

当然不会每次都使用保存到唯一文件,因此似乎不需要强制构造函数参数。另一方面,服务通常通过数据进行通信,这里我们有一个服务,它确实使 API 有点困惑。

将服务作为方法参数传递是否存在任何潜在的问题/不便?在这种情况下,构造函数注入(inject)是否仍然是首选?

最佳答案

将服务作为参数传递是很成问题的,因为你永远不知道什么时候需要它们。 Methods and their parameters constitute your API, whereas the constructor doesn't 。使用构造函数注入(inject)服务为您提供了更大的自由度,因为它允许您将依赖项与方法所表达的 API 解耦。

否则,您必须将方法参数传递给 API 中的所有方法,以防其中一两个方法可能需要它。

偶数when a service is only used once in a while, it's rarely an issue通过构造函数注入(inject)它们。

关于language-agnostic - 注入(inject)很少使用的服务 - 构造函数与方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111462/

相关文章:

html - 哪个HTML元素具有特定类型的子级(例如标记)数量最多?

language-agnostic - 如何知道何时发送 304 Not Modified 响应

c# - 插件架构中的 DI (Autofac) : Is one separate DI container per plug-in OK?

javascript - Angular 2 - 如何使用其他组件作为服务并获取其数据

asp.net-mvc - Unity 使用参数将依赖项注入(inject)到 MVC 过滤器类中

android - Hilt : java. lang.ClassNotFoundException: 找不到类 "com.kotlin20test.Hilt_MyApp"

language-agnostic - 业务逻辑的另一个词?

language-agnostic - 您在类中允许的最大方法的限制 N 是多少?

c# - 如何从一维 int 数组返回数字网格?

dependency-injection - zf2 将参数传递给服务工厂