从写死到写活

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.总结

本随笔记录了我的一些认识,关于依赖注入框架很多东西公司都是封装好的,还要继续深入的学习,最后还是求指教~~

 

posted @ 2015-05-21 18:30  时噬者  阅读(2039)  评论(10编辑  收藏  举报