從寫死到寫活


1.背景

    本來菜鳥一枚,也是剛離開母校的學生,最近在接觸依賴注入框架,看到它的好處之后,突然回憶起自己寫代碼的道路,雖然還走得不長,確實有自己的代碼從寫死到寫活的體會,願能幫助到有需要的人,也願能博大牛一笑。

2.死代碼

    拿最熟悉的一個例子來說明吧,數據庫連接訪問。下面是執行SQL數據庫操作的代碼:

        public void Insert(string sqlstr)
        {
            SqlConnection con = new SqlConnection("連接字符串");
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = sqlstr;
            cmd.ExecuteNonQuery();
            con.Dispose();
        }

現在客戶的要求變了,“我要換oracle數據庫,oracle數據庫比較高級!”,客戶說道。那么以前的我會怎么做呢?答案是直接在函數(不止是這個函數,所有跟訪問數據庫的函數)上修改咯,看到sql就換成oracle咯

        public void Insert(string sqlstr)
        {
            OracleConnection con = new OracleConnection("連接字符串");
            con.Open();
            OracleCommand cmd = con.CreateCommand();
            cmd.CommandText = sqlstr;
            cmd.ExecuteNonQuery();
            con.Dispose();
        }

加班改好之后,客戶又說“oracle用得不習慣,還是mssql好~”.......哭瞎,這下又要乖乖把全部代碼修回去。

顯而易見這種寫法的缺點是有多嚴重,而且面向對象原則是少改代碼啊,下面來看看改良版的。

3.半死半活代碼

   面向對象有個很重要的特性就是多態,一個基類的引用變量,可以指向多個不同的派生類對象,就叫多態。

有什么用呢?看看下面的代碼。

        public void add(string sqlstr)
        {
            IDbConnection con = new SqlConnection("連接字符串");
            con.Open();
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = sqlstr;
            cmd.ExecuteNonQuery();
            con.Dispose();
        }

因為SqlConnection實現了IDbConnection接口,而SqlCommand實現了IDbCommand接口,所以可以用這些接口來指向具體對象。

客戶這時候用嚷嚷:“某某公司都用了oracle,我們怎么能輸,我們還是得用!!”,這時候改代碼就只需要把具體對象改成關於oracle的數據庫操作對象即可,是不是比起上面那個工作量少了一半?好像還不止......

4.依賴注入

依賴注入是ioc模式的一種實現,大概意思是不要過度的高層代碼不要過度依賴於低層代碼,讓低層代碼實現接口,而高層代碼直接依賴於接口即可,當業務再發生變化時,只需要修改接口與低層代碼的映射就行。

 

        IDbConnection con;
        public void add(string sqlstr)
        {
            con.ConnectionString = "連接字符串";
            con.Open();
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = sqlstr;
            cmd.ExecuteNonQuery();
            con.Dispose();
        }

 

然后要在一個文件上注冊接口與實現類的關系

builder.Register<oracleConnection>().As<iDbConnection>();

注冊之后相當於讓iDbConnection接口指向了oracleConnection的實例對象

這樣運行時就會執行對oracle數據庫的操作。

這時候客戶又說道:“什么?oracle數據庫費用很高?那誰用啊,改回mssql吧~”這時候只需要改注冊的關系即可。

5.總結

本隨筆記錄了我的一些認識,關於依賴注入框架很多東西公司都是封裝好的,還要繼續深入的學習,最后還是求指教~~

 


免責聲明!

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



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