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机的接口即可。
优势:
高层模块的代码无需改动,避免改动高层模块对其他模块的影响。
修改部分代码的时候不会造成系统的崩溃。
代码可复用,提高开发效率。
- 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也需要修改,这样两者之间的存在极高的耦合度。
- DI 依赖注入 [IoC的实现方式]
依赖(低级)对象的创建绑定移除被依赖对象类的外面实现(分离)。
主要方式:属性注入、构造函数注入、接口注入
- IoC容器
是一个DI框架,用来动态创建、注入依赖对象;管理对象生命周期;映射依赖关系。
是属于DI的构造函数注入类型。
四者的关系: