作者:尛爱总_305 | 来源:互联网 | 2023-05-27 18:48
是否应将依赖项存储到具有私有setter和public getter的私有字段或属性?这适用于构造函数DI.
为了清楚起见,在属性示例中,我不希望将这些添加到附带的接口,除非它有意义 - 即它们只在实现类型中可见:
interface IFoo {
void DoSomething();
}
class Foo : IFoo {
private readonly IService dependency;
public Foo(IService dependency) {
this.dependency = dependency;
}
}
class Bar : IFoo {
public Foo(IService dependency) {
this.Dependency = dependency;
}
public IService Dependency { get; private set; }
}
Frank..
11
我总是会推荐private readonly
字段,只要不需要从对象外部访问依赖项.将您的对象视为"黑匣子",并尽可能少地放在他们的公共界面中.这种做法更好地称为封装原则或信息隐藏,也适用于注入的依赖关系:暴露的越少,您减少的类与类的用户之间的紧密耦合就越多.
应该提到的另一个原则是对对象的行为进行建模:告诉,不要问.如果您需要完成某项任务,请让对象为您完成.它将在进程中使用其依赖项.询问属性并自己完成工作应该只是数据对象(DTO)的首选.
这也是首先使用构造函数注入的原因:如果将属性作为属性公开是最佳实践,则每个人都会进行属性注入,因为这意味着更少的代码(我们不需要构造函数).
1> Frank..:
我总是会推荐private readonly
字段,只要不需要从对象外部访问依赖项.将您的对象视为"黑匣子",并尽可能少地放在他们的公共界面中.这种做法更好地称为封装原则或信息隐藏,也适用于注入的依赖关系:暴露的越少,您减少的类与类的用户之间的紧密耦合就越多.
应该提到的另一个原则是对对象的行为进行建模:告诉,不要问.如果您需要完成某项任务,请让对象为您完成.它将在进程中使用其依赖项.询问属性并自己完成工作应该只是数据对象(DTO)的首选.
这也是首先使用构造函数注入的原因:如果将属性作为属性公开是最佳实践,则每个人都会进行属性注入,因为这意味着更少的代码(我们不需要构造函数).