软件设计:理解 DIP、IoC、DI、IoC容器是何物?

OOD面向对象设计是我们开发出高性能、易扩展以及易复用程序的有力工具。

软件设计原则

何为正确的,何为错误的,规则是什么,泛泛而谈

软件设计模式

开发经验总结出来的解决方案

 

OOD的一个重要思想就是DIP依赖倒置原则。

DIP

依赖倒置原则

IoC

控制反转;DIP的实现方式

DI

依赖注入;IoC的实现方式

IoC容器

是DI的框架,主要映射依赖、管理对象创建、生存周期

1、DIP[软件设计原则]

在OOD中,DIP是解耦软件模块的一种特定形式。按照DIP原则,高级策略设置模块与低级依赖模块的依赖关系是相反的。

Bob Martin:

High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).

Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.

也就是说:

高级模块不再依赖于低级模块,两者都应该依赖于一个抽象模块,比如说接口等。

抽象不依赖于实现,实现取决于抽象。

 

实际操作中,我们都是将高层模块作为接口定义层,低层模块对高层模块的接口进行实现。

实例:POS机

每个POS机可以接受多种银行卡,实现收付款功能。在这里,POS机就是定义了银行卡接入的接口,每次刷入新银行卡时,POS机无需任何改动,只需要在新银行卡中实现POS机的接口即可。

优势:

高层模块的代码无需改动,避免改动高层模块对其他模块的影响。

修改部分代码的时候不会造成系统的崩溃。

代码可复用,提高开发效率。

  1. IoC  [软件设计模式]

指明软件如何解依赖模块的耦合。实现:依赖模块不在被依赖模块中通过new来获取。实现方式:DI和服务定位。

传统实际开发中:

public class A{

     public void Ashow()

    {

        Console.WriteLine("class A!!");

     }

}

在定义一个类AA负责逻辑处理,需要调用A的操作Ashow。我们就需要在AA定义A的对象和初始化。使用New

public class AA

{

        private readonly  A  dal = new A();

         public void Ashow()

       {

           dal.Ashow();

       }

}

显示:

static void Main(string[] args)

{

     Order order = new Order();

     order.Add();

     Console.Read();

}

当我们需要修改A的时候,AA也需要修改,这样两者之间的存在极高的耦合度。

  1. DI 依赖注入 [IoC的实现方式]

依赖(低级)对象的创建绑定移除被依赖对象类的外面实现(分离)。

主要方式:属性注入、构造函数注入、接口注入

  1. IoC容器

是一个DI框架,用来动态创建、注入依赖对象;管理对象生命周期;映射依赖关系。

是属于DI的构造函数注入类型。

 

四者的关系:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值