第二阶段第一次作业:理解IOC和DI
1. 概念
控制反转:是一种代理思想,把依赖的控制权交托出去。交托给谁?交托给中心化容器。容器里面放什么?各种你需要依赖的实例。反转就是本来你做的事情交托出去了。
依赖注入:上述思想的一种具体实现方式,即中心化容器,把你需要的外部资源交付给你。
讲个故事:很久很久以前(加上这句有点讲故事又不受限制的赶脚),你(A)穿越到一个村子,你需要一把菜刀(A依赖B)。你找上了王铁匠,王铁匠给了你一把菜刀,拿着菜刀你高兴的回家切菜了。你一刀切下去,坏了,刀柄(C)裂了。你气坏了,找上了王铁匠一顿暴打(修复bug),王铁匠告知,刀柄是李木匠提供的(B依赖C)。你又冲到李木匠家把李木匠暴打一顿。好了,气是消了。但回头一寻思,你发觉这样搞有点累,打了王铁匠又打李木匠,子子孙孙无穷尽也。这时候村长(中心化容器)粉墨登场,村长给你一张清单(配置),并告知你,你照着清单填写需求,后面的事你不用管,你要什么我给你什么。后来你照这个法子订制了一把柴刀,村长很快就交付给你了。这下你乐坏了,再也不用担心王铁匠和李木匠之间的破事儿了,甚至连木匠长啥样家住何方你都不用管,要什么给村长吼一嗓子就搞定。舒适的日子没有持续太久,村中恶龙捣乱,你需要一把神兵屠龙刀。但屠龙刀的设计和材料参数太过复杂,村长给的清单一共800多页,你顿时傻眼了。村长可是万中挑一的聪明人,看到你犯难的神色,马上提议:要不我们达成些默认的协议,屠龙刀的花纹颜色这些,大概率你也不太在意,我给你做成缺省值,你只需要给我填写你最关心的数据。那敢情好啊,800多页就浓缩成1页了(约定大于配置)。你突然茅塞顿开,村长所谓大概率,真乃人生哲学。
2. 为什么
那肯定是有好处啊。解耦解耦解耦。什么组件化、什么复用都是为了解耦。这里有个关键,即中心化容器,一个大黑盒,应用很广泛。npm或者maven这类包管理工具,都是这种思想的应用。你要什么包,你跟npm或者maven吼一嗓子,它都给你处理好了,包与包之间的依赖,版本管理,你都可以忽略了,因为它们有配套的中心化仓库和包管理算法。很方便,不是么。而约定大于配置,lin-ui优雅的默认值不也是一种应用吗?
正在回答
写的挺有意思,但是最后这个组件化和服用都是为了解耦,这个不太赞同。为什么这么认为?
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星