gpt4 book ai didi

dependency-injection - 通过构造函数传递什么以及通过接口(interface)传递什么?

转载 作者:行者123 更新时间:2023-12-04 08:23:15 25 4
gpt4 key购买 nike

这是一个关于依赖注入(inject)的问题。在构造服务对象时,我们在构造阶段通过构造函数传入协作者。服务对象将实现一个接口(interface),该接口(interface)将在运行阶段调用。

有时很难知道特定对象是应该通过构造函数传递还是应该成为服务类实现的接口(interface)的一部分?

关于选择一个选项而不是另一个选项是否有任何规则?当您知道接口(interface)在您编写代码的场景中只会被调用一次时,问题就变得最困难了。

最佳答案

我喜欢这样想:

  • 构造函数参数是实现细节
    • 它们适用于所有操作
    • 它们不会响应任何操作而改变(不变的)
    • 没有它们也能理解界面
    • 它们是反射(reflect)应用接缝的配置值
  • 方法参数是上下文相关的
    • 它们仅限于单个操作
    • 它们是反射(reflect)应用程序数据流的运行时值

很多艺术在于正确地界定问题。例如,我们可能会对自己说“我需要在用户表中创建一个新行”。从这个角度来看,这些签名中的任何一个似乎都不错:

void Insert(User user);

void Insert(User user, IDbConnection dbConnection);

但是,我们可以分解我们的任务定义:

意图:创建一个新用户

实现细节:用户是表格中的一行

让我们将任务定义为“我需要创建一个用户”。这为我们提供了一种评估上述两个签名的方法,支持符合我们意图的签名:

void Insert(User user);

分析操作的意图及其数据的适用范围通常会得出可靠的结果。

关于dependency-injection - 通过构造函数传递什么以及通过接口(interface)传递什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039645/

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