控制反转和依赖注入 - 转载

博客一:

https://blog.csdn.net/sinat_21843047/article/details/80297951

博客二:通过接口来理解依赖注入与控制反转

https://www.cnblogs.com/zhaopei/p/5078539.html

DAO:

public class DaoMySql
 {
     public int add(string str)
     {
         //...省略具体实现
         return 1;
     }
     //...省略具体实现,如修改 删除 查询
 }

Impl:

public class AddStudentImpl
{
    DaoMySql mysql= null;
    public AddStudentImpl()
    {
        mysql= new DaoMySql ();
    }
    public int addStudent()
    {
        string str = "";  //...省略具体实现
        return mysql.add(str);
    }
}

注意:mysql这个对象是由AddStudentImpl类主动创造

UI:

 public class UI
 {
     AddStudentImpl s = new AddStudentImpl();
     public UI()
     {
         s.addStudent();
     }
 }

应该说简单得不能在简单的三层。
就在系统用了一年之后,老板说:”听说oracle很牛逼,大公司都是用的oracle。咱们也换上吧。“。 好,那就换吧。于是就要写一个DaoOracle类 还要修改BLL类,还要修改UI类,非常的麻烦! 这得想一个好的办法。
首先,我们定义一个数据访问接口。

public interface ISqlHelper
{
    int add();
    //...省略具体实现,如修改 删除 查询
 }

Dao修改如下:

public class DaoMySql interface:ISqlHelper
 {
     public int add(string str)
     {
         //...省略具体实现
         return 1;
     }
     //...省略具体实现,如修改 删除 查询
 }
 
public class DaoOracle interface:ISqlHelper
 {
     public int add(string str)
     {
         //...省略具体实现
         return 1;
     }
     //...省略具体实现,如修改 删除 查询
 }

Impl修改如下:

public class AddStudentImpl
{
    ISqlHelper sql= null;
    public AddStudentImpl(ISqlHelper sql )
    {
        this.sql = sql;
    }
    public int addStudent()
    {
        string str = "";  //...省略具体实现
        return sql .add(str);
    }
}

UI:

public class UI
{       
    public UI()
    {
        ISqlHelper sqlhelper = new DaoOracle();
        AddStudentImpl s = new BLLAddStudentImpl(sqlhelper);
        s.addStudent();
    }
}

在之后如果想要更改数据库更换需求,则只用更改UI层即可。Impl层是完全不用改变的。
这里的UI对于Impl来说就是“依赖注入”,Impl对于UI来说就是“控制反转”。
Impl类原来由自己主动new一个对象,而更改以后则由UI层来将对象注入给Impl层,Impl层被动的接受对象。由主动变为被动,这就是控制反转。UI层有点类似于Spring的IOC容器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值