是否应该将依赖项存储到具有私有 setter 和公共 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; }
}
我总是会推荐private readonly
字段,只要不需要从对象外部访问依赖项即可。将您的对象视为“黑匣子”,并尽可能少地在其公共接口中放置。这种做法更广为人知的是封装原理 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) or 信息隐藏并且也适用于注入的依赖项:暴露的越少,类和类的用户之间的紧密耦合就越减少。
另一个应该提到的原则是对对象的行为进行建模:告诉,不要问。如果你需要完成某件事,请要求对象为你做。它将在此过程中使用其依赖项。请求属性并自己完成工作应该只是数据对象 (DTO) 的首选。
这也是首先使用构造函数注入的原因:如果将依赖项公开为属性是最佳实践,那么每个人都会进行属性注入,因为这意味着更少的代码(那么我们就不需要构造函数了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)