[Object-oriented] : 控制反转
前言 :
参加点部落的活动,关于IoC(控制反转)大家有很多的讨论。
本文排除对象生成的部份,单纯解释IoC为甚么叫做控制反转。
本篇文章以之前写的 [Object-oriented] : 重用内容来举例。
未IoC之前的对象图 :
很明显的
左边的组件A,相依右边的组件B。
左边的对象,相依右边的对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Robot { private Car _car = null ; public Robot(Car car) { _car = car; } public void Work() { _car.Run(); } } public class Car { public void Run() { } } |
IoC之后的对象图 :
很清楚的看到,组件A不再相依组件B。
反倒是组件B为了继承ICar接口,相依了组件A。(物件也是相依性反转)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Robot { private ICar _car = null ; public Robot(ICar car) { _car = car; } public void Work() { _car.Run(); } } public interface ICar { void Run(); } public class Car : ICar { public void Run() { } } |
后记 :
由上面的范例来看,
很明显的对象的相依性方向改变了。
还有组件的相依性方向也改变了。
总的归纳起来。
狭义的说 : 在切割对象相依性的时候,可以采用IoC。
广义的说 : 在架构子系统或是应用层的时候,也可以采用IoC。
广广义的说 : ASP.NET把页面的内容,交由程序设计师去撰写,也是IoC的一种应用。
他是一种实现『切割相依性』、『重用上层,抽换下层』这些目的的模式。
IoC不是很新奇的技术,甚至跟各种面向对象技术、设计模式都有点部份重合。
但是主要是让我们在切割类别或是系统的时候,有个共同的名词。
另外补充,学习模式是用来帮助设计、分析跟学习。
学完了之后实际在工作上去实做, 等写到忘记这些模式名词,
并且可以组合出自己需要的模式,才算真的有到一个段落。
(怎么有点像倚天屠龙记的桥段...XD)
期許自己~
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。
分类:
Object-oriented
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?