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

发布于 2024-08-09 15:56:56 字数 52 浏览 5 评论 0原文

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

I'm relatively unskilled in Dependency Injection, and I'd like to learn some best practices and anti-patterns to use and avoid respectively when using DI.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

甜味超标? 2024-08-16 15:56:56

我真的很喜欢这篇关于 DI 的文章,因为它针对的是那些没有大量 DI 经验,或者甚至不知道它是什么的人。

https://mtaulty.com/2009/08/10/m_11554/

什么是统一?

它是一个“依赖注入容器”。

现在,那时有一群人
读到这里你会说“是的,我们知道
我们已经在使用它了
A、B、C 或者我们选择不使用它
出于 X、Y、Z 的原因”,我想象
其他人可能会说;

<前><代码>“嗯?什么是依赖注入容器?”

这篇文章是写给后者的——
这并不意味着详尽无遗,但是
希望这不完全
没有帮助:-)

I really enjoyed this article regarding DI, as it's targeted towards people who don't have a ton of DI experience, or don't even know what it is.

https://mtaulty.com/2009/08/10/m_11554/

What’s Unity?

It’s a “dependency injection container”.

Now, at that point a bunch of folks
reading this will say “Yes, we know
and we’re already using it for reasons
A, B, C or we’ve elected not to use it
for reasons X,Y,Z ” and I imagine a
bunch of other folks might say;

“Huh? What’s a dependency injection container?”

This post is for the latter people –
it’s not meant to be exhaustive but
hopefully it’s not completely
unhelpful either :-)

岛徒 2024-08-16 15:56:56

在我看来,Dhanji Prasanna 的书 依赖注入 是软件设计人员必读的一本书,无论是初学者还是专家。它直接处理您的 DI 问题。

In my opinion, Dhanji Prasanna's book Dependency Injection is a must read for software designers, both beginners and experts. It deals directly with your DI questions.

年少掌心 2024-08-16 15:56:56

There's a best practices section in Guice's user's guide.

堇色安年 2024-08-16 15:56:56

我发现,当我看到违反 德米特法则 的行为时,这是一个暗示我可能想要依赖注入。

例如:

void doit()
{
    i += object.anotherobject.addvalue; //violation of Law of Demeter
}

有时会提示我可能想要依赖注入anotherobject

I've found that when I see a violation of the Law of Demeter that is a hint that I might want dependency injection.

For example:

void doit()
{
    i += object.anotherobject.addvalue; //violation of Law of Demeter
}

Sometimes hints that I might want to dependency inject anotherobject.

空气里的味道 2024-08-16 15:56:56

我关于何时使用 DI 的基本规则是我将在层之间注入,因此我的控制器和 dao 之间将是一个层,因此我可以注入,这样如果我想模拟一个层我就可以。

我认为在同一层中使用 DI 不是一个好主意,主要是因为层应该紧密耦合,因为它们是相关的,除非您有一个使其有用的用户故事。

例如,如果您的 DAO 可能位于不同的计算机上,那么您可能需要能够假装它们是一层,但使用 DI 在一台计算机上和不同的计算机上实际切换。然后开发人员可以在一台机器上完成所有工作,并且它应该在不同的机器上工作。

但是,除非有迫切的需要,否则我认为同一层内的 DI 是不必要的复杂化。

My basic rule about when to use DI is that I will inject between layers, so between my controller and the dao would be a layer, so I can inject, so that if I want to mock out a layer I can.

I think using DI within the same layer is not a good idea mainly because the layer should be tightly coupled, as they are related, unless you have a user story that makes it useful.

For example, if your DAO is may be on separate computers then you may need to be able to pretend that they are one layer, but use DI to actually switch between all on one machine and separate machines. Then the developer can do everything on one machine and it should work on separate machines.

But, unless there is some pressing need, I think DI within the same layer is an unnecessary complication.

抽个烟儿 2024-08-16 15:56:56

这是依赖注入反模式: 多个构造函数

Here's a dependency injection anti-pattern: Multiple Constructors.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文