在编写非DI系统时,一个坚持我的比喻是“一个人玩他/她的玩具”。作为对象的人和人的玩具是对象创建,存储,初始化和操作的任何东西。玩具可以在达到特定状态时发送事件,但他们对使用它们的人一无所知;它们只是带有控制开关的黑色小盒子,构成了它们的接口。该人可以从玩具中听取事件并通过操纵他们的界面进行响应。这个人可以用他/她的玩具做任何他/她想做的事情,但是他/她可能不应该干涉他们的内脏,因为他们可能会破坏。
DI对我的比喻造成的破坏是它将玩具变成有意识的生物,知道它们的主人,使用它们的人。玩具可以操纵这个人,但是这个人对他们的工作方式一无所知,甚至不关心。这个人只拥有玩具,并期望玩具操纵他/她自己满意的玩具。
WTF ??听起来很糟糕!!
他们一直在使用什么样的心理隐喻来思考DI系统是如何工作的?
答案 0 :(得分:10)
或者如果你想让它更贴近你的比喻,你的班级就是孩子,DI框架是妈妈,玩具是其他组成部分。孩子不关心玩具的来源,只要她能按照自己想要的方式玩耍。
答案 1 :(得分:3)
SOLID motivational images是一个很好的来源。
答案 2 :(得分:2)
从我的角度来看,DI和非DI之间的区别在于你的隐喻是非DI系统,每个人都制作自己的玩具 - 他们必须知道如何制作它们,他们只能使用他们的玩具使。使用DI,该人使用他们给予的玩具。他们不知道如何制作它们,但只要知道玩具的行为,他们就可以玩任何玩具。
答案 3 :(得分:2)
积木。
将乐高积木视为一个暴露一个或多个界面(顶部的小凹凸)的软件组件,并且有一个或多个setter或构造函数参数(底部的洞)。
当您购买一盒乐高积木时,这些积木不会预组装(硬连线)。它们是独立的组件。然后通过将接口(凸块)连接到设置器/构造器(孔)来组装它们(连接它们)。每个块直接对其他块一无所知。除了块之外还需要一些东西来组装它们 - 即你(或main()或Spring配置文件等)。
我知道......这有点分解,因为乐高积木主要有一个统一的界面 - 但它对我有用: - )
答案 4 :(得分:2)
你 - DI框架。
系统块 - 正在服务的系统
监视器/鼠标/键盘 - DI(您)提供给系统块的服务。
答案 5 :(得分:1)
玩具没有意识。他们只是让这个人将一些字符串绑在钩子上,当某些事情发生时,钩子会转动,字符串会被拉上,所以这个人知道发生了什么。
答案 6 :(得分:1)
我被告知的一个DI比喻是将它与CD播放器相关联。玩家不在乎你放入什么CD;但是,您注入播放器的每张CD都会根据播放器的要求提供不同的功能。
答案 7 :(得分:0)
所有关于武士和武器。尝试查看ninject:http://ninject.org/。转到“访问道场”角色,获取一个有趣的比喻。不确定这是不是你的意思,但它仍然具有创造性。