架構,改善程序復用性的設計~第五講 復用離不開反射和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#,信仰面向對象

 

感謝各位!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM