架构,改善程序复用性的设计~第五讲 复用离不开反射和IOC续(大白话IOC)
要研究的问题:IOC是什么?它解决了什么?我们的项目中为何要用IOC?反射对性能真的影响很大吗?不用反射,谁意见最大?
来吧,开始说问题
1,IOC是什么?不用说什么容器,框架,大白话其实IOC就是将一些接口与它的各种实现的类名配置在一个文件中,可以是XML,也可以是.config配置文件中,然后在程序“运行时”去根据配置的信息去动态得到(resolved)这个对象,然后程序中就可以使用这个对象了,所IOC就是用来建立对象的。
2,它解决了什么?一个接口,有三种实现,如sql实现,oracle实现,access实现等,那当前环境下用哪种方式来进行实现呢,这时可以由IOC来实现它。
1 // 统一规范 2 public interface IRepository<TEntity> where TEntity : class 3 { 4 void Insert(TEntity entity); 5 } 6 7 // sql 实现 8 public class SqlRepository<TEntity> : IRepository<TEntity> 9 { 10 public void Insert(TEntity entity) 11 { 12 ... 13 } 14 } 15 16 // Access实现 17 public class AccessRepository<TEntity> : IRepository<TEntity> 18 { 19 public void Insert(TEntity entity) 20 { 21 ... 22 } 23 }
3,我们的项目中为何要用IOC?在项目中用IOC的目的很简单,就是让程序松耦合,说的有点抽象,看一个小代码
1 class UserService 2 { 3 var userRepository=new UserRepository(); 4 }
我们可以看到userRepository对象它依赖于UserRepository的实现,当我们需要改变userRepository的实现方法时,很困难,只能去代码中改变,这样导致程序的扩展性很低,这是项目中引入IOC的原因,也就是说:“当程序模块有多种实现方式时,可以引用IOC方式来创建对象的实例”。
4,反射对性能真的影响很大吗?这个问题有无数个人做了无数次实验,反射和不用反射的程序,差距不好确定,因为它与数据复杂度还有关系,一般数据量小时,可能几十倍,数据量时,可能上百倍(反射在底层实现时),我们可以从微软的原码中看到,它在一些时候使用了很多反射,是的,我本人不反对使用反射,因为我是一个面向对象的忠实信仰者。
5,不用反射,谁意见最大?这个问题很有意思,谁意见最大?我看因为是“面向对象”意见最大,因为我们无法去想像一个没有反射的程序是如何面向对象的,当一个需求被更改时,就要去修改你的程序代码,这对于程序员是一种痛苦,也违背了面向对象的原则,我想,即然C#是一个完全面向对象的语言,那我们在写程序时,是否应该面向对象更多一些,而不是那么一点点的性能,而且这种性能的浪费我认为是完成值得的。
信仰C#,信仰面向对象
感谢各位!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2011-06-03 看看Jquery,再看看传统的JS,我们来效仿一$(function(){$(“#a”).click=function(){};});吧
2011-06-03 JS里的prototype对JS类(方法,函数,function)进行一个扩展吧!