翻了一下和师傅的聊天记录,从7.26到今天,学习IOC框架实战开发已经快一个月余了。
照着视频手敲代码,今天是第一次成功运行了,也算是一个小小的里程碑。
特此记录一下学习过程和经验,作为自己总结的同时也抛砖引玉,希望获得师兄师姐的批评和更好的学习建议。
师傅说:IOC框架是最经典也是比较难的,IOC搞懂了以后再写项目再无盲目。
“IOC”
第一次与这个家伙短兵相接的时候,他认不认识我,我是不知道的,我不认识它,这我是肯定的。
作为一个写程序的人,最重要的技能没有之一,就是运用浏览器找到自己想要了解的内容。
当然了,现在用人工智能大语言模型搜索的效率要远远大于浏览器。
问:编程中IOC是什么意思?
答:“Inversion of Control”控制反转。
控制反转是一种设计原则,它将对象的创建、配置和管理的控制权从应用程序代码转移到了外部的框架或容器。
例如,在传统的编程模式中,对象 A 如果需要使用对象 B,通常会自己创建对象 B 。
但在采用 IOC 模式的框架中,对象 A 不再自己创建对象 B,而是由框架来创建并注入给对象 A 。
IOC 有几种常见的实现方式,如依赖注入(Dependency Injection,DI)。
依赖注入是控制反转的一种具体实现,通过构造函数注入、属性注入或方法注入等方式,将依赖的对象传递给需要的对象。
例如,假设一个 StudentService
类需要使用一个 DatabaseRepository
类来获取数据,在依赖注入的模式下,不是 StudentService
自己创建 DatabaseRepository
对象,而是在外部配置好后注入给 StudentService
。
IOC 的好处包括:
- 降低模块之间的耦合度,使得各个模块更加独立,易于维护和测试。
- 提高代码的灵活性和可扩展性,方便在不同的场景中替换或修改依赖的对象。
- 更有利于进行单元测试,可以通过模拟依赖对象来单独测试某个模块的功能。
许多现代的编程语言和框架都支持 IOC 原则,比如 Java 中的 Spring 框架,.NET 中的 Autofac 等。
哦豁,看起来大概是对象不用自己创建了,由一个东西统一的来给你分配对象。
一知半解,不过没关系,咱们直接撸课。
IOC框架的课,我是看了2.5遍的。
怎么是2.5遍呢?
就如同刚才说的,第一次与这个家伙短兵相接,我是啥也不懂。
大概感觉是已经听到了20多集,连师傅在干什么都不知道。
这个世界上的任何存在的东西,都不是用来为难人的,
尤其是在编程这一块,大部分的技术都是用来方便开发。
既然它存在,那么就一定能被理解。
这是我学编程以来一直都深信的一个观点。
读《易经》《道德经》这样的古文经典,也有一个方法:
读不懂没关系,一个人写一篇五千字的文章不会有前后矛盾的地方,
看到后面会有自解释性的文字。
学习、听课、看视频也是一样,虽然我又笨又菜,
但是一整套视频课程一丁点都听不懂,那也是不太可能的吧。
硬着头皮往下干吧。
家人们,一边听一遍祈祷脑子自己能够理解。
昏昏欲睡...
直到我遇到了这一集--《33-设计登录页面并创建User实体》。
那种感觉,真的是柳暗花明又一村,其中滋味不可为外人道。
登录界面我设计过呀,这我熟啊。
老乡见老乡,两眼泪汪汪。
这一点熟悉的感觉就有了坚持下去的动力。
创建登录界面,绑定数据,登录成功,跳转。
但是他的方式与之前我所写的是完全不同的。
可以说第一遍听完,只理解了1%的内容。
二刷的时候,发现了有很多漏掉的东西。
比如说刚开始课程中的这张图,
后知后觉才发现是整个课程的架构和重点。
整个课程是按照这个图来展开,是纲领的纲领。
第一遍,这个不争气的脑子竟然是走神直接溜过去了。
现在看这个图来,感觉十分的亲切。
但是在二刷课程的过程中,依然是不知道师傅在做什么的。
理想很丰满,想象之中是在第二遍听课的时候,照着视频把代码敲下来。
但是发现这样做不到,难度太大。
于是我在Word上开始记录步骤和写伪代码,后面变成了截图
第二遍听完后,我开始回过头来,按照自己的笔记开始动手敲代码。
这里分享给大家,如果也要记笔记或截图,那么尽量要详细一点。
在敲代码的时候会省力很多。
并且最好把师傅在哪个地方调试了也标注一下,跟着一起调试。
不然只一味的敲代码不进行调试,最后有多个bug堆在一起,是一件很恐怖的事情。
之所以说是0.5遍,是因为在写代码的过程中,
笔记记录的不全或者看不懂的地方,才会去找对应的课程去看对应的操作了。
在这里要提一嘴,源码对照是很重要的。
有了源码对照和课程,几乎98%的问题,都能够自己解决。
在编程领域尽全力自己解决问题,同样也是收获最大和进步最快的方法。
别人可以帮你把bug找出来,但是你该不懂还是不懂。
唯一有一点不好的就是...心态容易崩溃。
现在看来,不断调试和Debug的痛苦过程,也确实是我进步最快的过程。
被bug逼着不得不一遍又一遍的调试,之所以找不到bug是因为不懂和对代码的不熟悉。
那么就只能一个方法一个方法的去研究,一行代码一行代码的去理解。
每个项目,每个类,甚至每个单词每个字母的去和源码对照。
是完全相同吗?完全相同凭什么师傅的能跑起来我的跑不起来。
IOC框架,说白了,无非就是一个容器和几个注册类,
本来我想再刷一遍课程,但是想起师傅之前说笔记系统好像有用到,打算学习新知识了。
完成好过完美,好读书不求甚解,
钱不能白花,懂不懂得,让我把课都先听完。
再有不懂的,我再回来三刷吧。
另外,有一点需要提到的是,
师傅在课程和源码里面,这个复制指令地址用的是他本地电脑的绝对路径。
如果你想要在自己电脑运行的话,可以改成图片中的相对路径。
copy /Y "$(TargetDir)$(ProjectName).dll" "..\Company.demo\bin\Debug\net7.0-windows\Modules"
最后,
我曾经问我的爸爸:“听说你年轻的时候跑步很厉害,有什么秘诀吗,教教我”
我的爸爸说:“前腿迈出去,后腿跟上,一步一步往前,坚持住就好了,有什么秘诀?”
后来我想,做任何事都是一样,共勉,希望我们都能成为很厉害的程序员,像师傅一样顶起自己的一片天。
孙修 - 2024年8月21日