Language agnostic 依赖注入最佳实践和反模式
我在依赖项注入方面相对不熟练,我想学习一些最佳实践和反模式,以便在使用DI时分别使用和避免。我发现,当我看到违反时,这暗示我可能需要依赖项注入 例如:Language agnostic 依赖注入最佳实践和反模式,language-agnostic,dependency-injection,anti-patterns,Language Agnostic,Dependency Injection,Anti Patterns,我在依赖项注入方面相对不熟练,我想学习一些最佳实践和反模式,以便在使用DI时分别使用和避免。我发现,当我看到违反时,这暗示我可能需要依赖项注入 例如: void doit() { i += object.anotherobject.addvalue; //violation of Law of Demeter } 有时提示我可能需要依赖注入另一个对象,我关于何时使用DI的基本规则是,我将在层之间注入,因此我的控制器和dao之间将是一个层,因此我可以注入,因此如果我想模拟一个层,我可以
void doit()
{
i += object.anotherobject.addvalue; //violation of Law of Demeter
}
有时提示我可能需要依赖注入另一个对象,我关于何时使用DI的基本规则是,我将在层之间注入,因此我的控制器和dao之间将是一个层,因此我可以注入,因此如果我想模拟一个层,我可以 我认为在同一层中使用DI不是一个好主意,主要是因为层应该紧密耦合,因为它们是相关的,除非你有一个用户故事使它有用 例如,如果您的DAO可能在不同的计算机上,那么您可能需要能够假装它们是一层,但使用DI在一台计算机上的所有计算机和不同的计算机之间进行切换。然后开发人员可以在一台机器上做任何事情,并且应该在不同的机器上工作
但是,除非有迫切需要,否则我认为同一层中的DI是一个不必要的复杂问题。在我看来,Dhanji Prasanna的书是软件设计师的必读书籍,无论是初学者还是专家。它直接处理您的DI问题。我非常喜欢这篇关于DI的文章,因为它针对的是那些没有大量DI经验,甚至不知道DI是什么的人 什么是团结
It’s a “dependency injection container”.
现在,在这一点上,一群人
读这篇文章会说:“是的,我们知道
我们使用它是有原因的
A、 B,C或者我们选择不使用它
因为X,Y,Z“,我想象
其他人可能会说
“Huh? What’s a dependency injection container?”
这篇文章是为后者写的——
这并不意味着详尽无遗,而是
希望不是完全的
无济于事:-)
< Guice >有一个最佳实践部分。 这是依赖注入反模式:这里我不认为“语言不可知论”有帮助:不同的语言支配着根本不同的方法——你真的不想在C++中做同样的事情,比如Ruby。那么,每种语言都可能问一些单独的问题吗?尽管如此,我认为有足够多的通用模式,因此有必要提出一个通用问题。我鼓励任何有兴趣对此问题做出贡献的人查看这些主题。在一个层中使用依赖项注入,您将重用现有组件实例,节约资源。我还想说,通过强制模块化设计,你正在培养良好的编程习惯。我只是看到它变得比需要的更复杂,但这取决于层上的内容。我倾向于在两层之间做,但这就是为什么我解释了为什么在一层之间做会有帮助,只是我不建议这样做。这有一定的道理,虽然有点跳跃,但并不完整。如果你发现违反了德米特定律,你就有机会选择抽象。任何时候进行抽象,都有机会选择注入依赖项,而不是自己创建依赖项。这是一个指标,但仅仅是一个指标。可能有更多的机会进行抽象,而不仅仅是这样,在实现DI的成本高于您可能获得的成本的地方,避免DI可能是有用的。尽管如此,+1。另一本好书是。