要研究的問題: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#,信仰面向對象
感謝各位!