中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

架構,改善程序(xu)復用(yong)性(xing)的設計~第五講 復用(yong)離不開反(fan)射(she)和IOC續(xu)(大白話IOC)

要研究(jiu)的問題:IOC是什(shen)么(me)?它解決了什(shen)么(me)?我(wo)們的項目中為何要用IOC?反(fan)射對性能真(zhen)的影響很(hen)大嗎?不(bu)用反(fan)射,誰意見(jian)最(zui)大?

來吧,開始說問題

1,IOC是什么?不用(yong)說什么容(rong)器,框架,大白話其實IOC就是將一些接口(kou)與它的各種(zhong)實現(xian)的類名(ming)配置在(zai)一個(ge)文(wen)件中(zhong),可以(yi)是XML,也可以(yi)是.config配置文(wen)件中(zhong),然(ran)后(hou)(hou)在(zai)程(cheng)序(xu)“運行(xing)時”去根據配置的信(xin)息(xi)去動態得到(resolved)這個(ge)對象,然(ran)后(hou)(hou)程(cheng)序(xu)中(zhong)就可以(yi)使用(yong)這個(ge)對象了,所IOC就是用(yong)來建立對象的。

2,它(ta)解決了什么?一個接口,有三種(zhong)實現,如(ru)sql實現,oracle實現,access實現等,那(nei)當(dang)前(qian)環境下用哪種(zhong)方式來(lai)進行實現呢,這時可以由IOC來(lai)實現它(ta)。

 

 1 // 統(tong)一(yi)規范
 2 public interface IRepository<TEntity> where TEntity : class
 3 {
 4   void Insert(TEntity entity);
 5 }
 6 
 7 // sql 實(shi)現
 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,我(wo)們的項目(mu)中為(wei)何(he)要用(yong)IOC?在項目(mu)中用(yong)IOC的目(mu)的很簡單,就是(shi)讓(rang)程序松耦合,說的有點抽象(xiang),看一個小代碼(ma)

1 class UserService
2 {
3     var userRepository=new UserRepository();
4 }

我們可以看到userRepository對象它依賴于UserRepository的實現,當(dang)我們(men)需要改變userRepository的實現方法時(shi),很(hen)困難,只能去代(dai)碼(ma)中(zhong)改變,這樣導(dao)致程序的擴展(zhan)性很(hen)低,這是項目中(zhong)引入IOC的原(yuan)因,也就是說:“當(dang)程序模塊有(you)多種(zhong)實現方式(shi)時(shi),可以引用IOC方式(shi)來創建對(dui)象的實例”。

4,反射(she)(she)對(dui)(dui)性能真的影響很(hen)大(da)嗎(ma)?這個問題(ti)有無數(shu)個人(ren)做了(le)無數(shu)次(ci)實(shi)驗,反射(she)(she)和不用反射(she)(she)的程序,差距不好確定(ding),因為它與數(shu)據(ju)(ju)復(fu)雜度還有關系,一般數(shu)據(ju)(ju)量(liang)小時,可(ke)能幾十(shi)倍,數(shu)據(ju)(ju)量(liang)時,可(ke)能上(shang)百倍(反射(she)(she)在底層實(shi)現(xian)時),我(wo)們(men)可(ke)以從微軟的原碼中看到,它在一些時候(hou)使用了(le)很(hen)多反射(she)(she),是(shi)(shi)的,我(wo)本人(ren)不反對(dui)(dui)使用反射(she)(she),因為我(wo)是(shi)(shi)一個面向(xiang)對(dui)(dui)象(xiang)的忠實(shi)信仰(yang)者。

5,不(bu)用反射(she),誰意(yi)見最(zui)大(da)?這個(ge)(ge)問題很(hen)有(you)意(yi)思,誰意(yi)見最(zui)大(da)?我(wo)看(kan)因為是(shi)“面向(xiang)對(dui)(dui)象(xiang)”意(yi)見最(zui)大(da),因為我(wo)們(men)無法去想像一個(ge)(ge)沒有(you)反射(she)的(de)(de)程序是(shi)如(ru)何面向(xiang)對(dui)(dui)象(xiang)的(de)(de),當一個(ge)(ge)需求被更(geng)改時,就要去修改你的(de)(de)程序代碼,這對(dui)(dui)于程序員是(shi)一種痛(tong)苦(ku),也違背(bei)了面向(xiang)對(dui)(dui)象(xiang)的(de)(de)原則,我(wo)想,即然(ran)C#是(shi)一個(ge)(ge)完(wan)全面向(xiang)對(dui)(dui)象(xiang)的(de)(de)語言,那我(wo)們(men)在寫程序時,是(shi)否應該面向(xiang)對(dui)(dui)象(xiang)更(geng)多一些,而(er)不(bu)是(shi)那么一點(dian)點(dian)的(de)(de)性(xing)能(neng),而(er)且這種性(xing)能(neng)的(de)(de)浪費我(wo)認為是(shi)完(wan)成值得的(de)(de)。

信仰C#,信仰面向對(dui)象

 

感謝各位!

 

 

 

 

posted @ 2012-06-03 23:31  張占嶺  閱讀(3490)  評論(14)    收藏  舉報