gpt4 book ai didi

c# - 注入(inject)的依赖项应该公开访问还是私有(private)?

转载 作者:行者123 更新时间:2023-11-30 13:26:16 26 4
gpt4 key购买 nike

是否应该将依赖项存储到具有私有(private) setter 和公共(public) getter 的私有(private)字段或属性?这适用于构造函数 DI。

明确地说,在属性示例中,我不希望将这些添加到伴随的接口(interface)中,除非它有意义 - 即它们只会在实现类型中可见:

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 字段,只要不需要从对象外部访问依赖项。将您的对象视为“黑盒子”,并尽可能少地放在它们的公共(public)接口(interface)中。这种做法更为人所知的是 encapsulation principle 信息隐藏,也适用于注入(inject)的依赖项:您公开的越少,您的类和类的用户之间的紧密耦合就越减少。

另一个应该提到的原则是建模对象的行为:告诉,不要问。如果您需要完成某件事,请让对象为您完成。它将在此过程中使用其依赖项。询问属性并自己完成工作应该只是数据对象 (DTO) 的首选。

这也是首先使用构造函数注入(inject)的原因:如果将依赖项作为属性公开是最佳实践,那么每个人都会进行属性注入(inject),因为这意味着更少的代码(那时我们不需要构造函数) .

关于c# - 注入(inject)的依赖项应该公开访问还是私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839935/

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