依赖注入链接反模式吗?

Joh*_*ker 3 oop design-patterns dependency-injection

这是问题所在,假设我们正在制作视频游戏,并希望使用依赖注入.这是我们拥有的:

Game Class  // This is just the code to keep track of the overall game logic
Character Class // This would be the guys in the game, good and bad guys both
Weapon Class // The weapons for the characters
Run Code Online (Sandbox Code Playgroud)

因此,通常当我执行依赖注入时,我会在地图上注入当前位置,并将游戏状态注入角色,这样我的角色就​​可以知道在哪里创建自己的信息等等.然后我让角色创建武器并注入关于武器强度的数值,以及游戏类等的其他一般游戏状态等.

这几乎对我来说似乎是一种反模式.我之所以这么说是因为现在你(至少对我来说似乎这样)的代码非常脆弱且难以改变.如果我们想要更改传递的游戏状态信息,我们将被迫更改所有三个类.我们对Game类进行了原始更改,然后修改了Character,最后修改了Weapon类.这是很多工作,特别是如果你要深入5级而不仅仅是3级.虽然是的,它可以让单位测试比没有DI更容易.

这听起来像是不好的做法.这是通常的事情吗?我们有什么样的"MotherShip"模式,一切都处于最高水平.因此,不是游戏创造角色创造武器,我们让游戏(或其他一些类)创造所有这些.

这样,如果我们想要为角色添加新武器,游戏类可以自己创建武器并注入它.不知道该怎么做.谢谢

Mar*_*ann 5

链接或嵌套依赖是一种非常自然的做法(虽然我必须同意tster,你的例子听起来有点奇怪),但我想我能理解为什么你发现它很脆弱 - 也就是说,如果你向他们的消费者注入具体类型.

诀窍是在每个依赖级别引入一个接口,以便您可以独立于使用者改变实现.作为示例,您应该定义一个IGame接口并将其注入Character类而不是Game类本身.

即便如此,具有大量深度嵌套的接口仍然可能很脆弱,因为您可能需要经常更改接口本身.最好通过尽可能地遵守好莱坞原则德米特定律来解决这个问题.