架构,改善程序复用性的设计~第五讲 复用离不开反射和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#,信仰面向对象

 

感谢各位!

 

 

 

 

posted @ 2012-06-03 23:31  张占岭  阅读(...)  评论(...编辑  收藏