这是关于依赖注入的问题。构造服务对象时,我们在构造阶段通过构造函数传递协作者。服务对象将实现一个接口,并在运行阶段调用它。
有时难以知道特定对象是应该通过构造函数传递还是属于服务类实现的接口的一部分?
是否有关于选择一个选项而不是另一个选项的规则?当你知道在你编码的场景中只调用一次接口时,问题就变得非常困难了。
答案 0 :(得分:5)
我喜欢这样想:
很多艺术都在正确地解决问题。例如,我们可能会对自己说“我需要在用户表中创建一个新行”。从这个角度来看,这些签名中的任何一个似乎都很好:
void Insert(User user);
void Insert(User user, IDbConnection dbConnection);
但是,我们可以分解我们的任务定义:
意图:创建新用户
实施细节:用户是表格中的一行
让我们将任务框架为“我需要创建用户”。这为我们提供了一种评估上述两个签名的方法,有利于符合我们意图的签名:
void Insert(User user);
分析操作的意图及其数据的适用范围通常会给出可靠的结果。
答案 1 :(得分:2)
我经常使用的经验法则是类是否可以在没有传入值的情况下运行,与构造函数的复杂性相平衡。如果没有参数,类无法正常运行,通常将它放在构造函数中是很好的。另一方面,如果类被设计为执行需要额外工作的事情,例如接受套接字上的连接,则此类工作通常应延迟到以后的功能。