zoukankan      html  css  js  c++  java
  • 从写死到写活

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

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

  • 相关阅读:
    MyEclipse无法破解的某种解决方法
    SDK Manager无法打开,闪退问题
    虚拟机不能ping通宿主机问题的解决
    Ubuntu下文件编码转换
    二、vertica安装实践
    搭建Samba服务器
    vmtools安装
    一、vertica 安装注意事项
    MFC如何配置使用Win7风格的控件而不是XP风格控件
    VS静态编译
  • 原文地址:https://www.cnblogs.com/hezhihao/p/4520347.html
Copyright © 2011-2022 走看看