Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 依赖注入最佳实践和反模式_Language Agnostic_Dependency Injection_Anti Patterns - Fatal编程技术网

Language agnostic 依赖注入最佳实践和反模式

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之间将是一个层,因此我可以注入,因此如果我想模拟一个层,我可以

我在依赖项注入方面相对不熟练,我想学习一些最佳实践和反模式,以便在使用DI时分别使用和避免。

我发现,当我看到违反时,这暗示我可能需要依赖项注入

例如:

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。另一本好书是。