首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过构造函数传递什么,通过接口传递什么?

通过构造函数传递什么,通过接口传递什么?
EN

Stack Overflow用户
提问于 2010-10-28 12:02:59
回答 2查看 102关注 0票数 3

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

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

关于选择一个而不是另一个,有什么规则吗?当您知道接口在您要编码的场景中只会被调用一次时,这个问题是最困难的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-28 15:22:52

我喜欢这样想:

  • 构造函数参数是实现细节
    • 它们的作用域是所有的(invariant)
    • The不会因任何操作而改变接口没有它们也可以理解
      • 它们是反映应用程序的

      的配置值

  • 方法参数是上下文相关的
    • ,它们的作用域为单个operation
    • They,它们是反映应用程序数据flow

的运行时值

很多技巧都是在正确地构建问题。例如,我们可能会对自己说:“我需要在用户表中创建一个新行。”从这个角度来看,这两个签名看起来都很好:

代码语言:javascript
复制
void Insert(User user);

void Insert(User user, IDbConnection dbConnection);

然而,我们可以分解我们的任务定义:

意图:创建新用户

实现详细信息:用户是表中的一行

相反,让我们将任务框架为“我需要创建一个用户”。这为我们提供了一种评估上面两个签名的方法,支持与我们的意图匹配的签名:

代码语言:javascript
复制
void Insert(User user);

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

票数 5
EN

Stack Overflow用户

发布于 2010-10-28 12:08:31

我经常使用的一条经验法则是,类是否可以在没有传入值的情况下工作,并与构造函数的复杂性相平衡。如果类不能在没有参数的情况下正常运行,通常最好将它放在构造函数中。另一方面,如果类被设计为做一些需要额外工作的工作,比如接受套接字上的连接,这类工作通常应该被延迟到以后的函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4039645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档