来之前应该先知道为什么咱们代码会分层。ui、bll、dll。。。
1:代码重用。
2:可扩展。
3:分工明确。(面向对象)
但是分层是引用业务层啊、数据层的dll。然后直接实例化类型。
依赖倒置原则DIP:系统架构时,高层模块不应该依赖于低层模块(也就是不直接引用dll,然后直接new class()),二者通过抽象来依赖, 依赖抽象,而不是细节(直接实例化)。这样就把扩展性提高了。你你比如咱们定义了一个SqlServer类。实现了ISqlOperation(对sqlserver的数据处理:增删改查等等)。那这个SqlServer类可以满足sqlserver数据库的所有操作。后来项目遇到一个去处理Mysql数据库。那怎么办。好办呗。也实现ISqlOperation这个类。之前的前端代码(BLL啊、还是更前面的)就不用改了。这个项目也就扩展了是吧。
就是面向抽象(抽象类、接口):1 一个方法能满足多种类型 2 支持下层的扩展。
IOC控制反转:
传统开发,上端依赖(调用/指定)下端对象,会有依赖;引用dll和直接实例化就算直接依赖。
把对下端对象的依赖转移到第三方容器(工厂+配置文件+反射)不是咱们自己直接实例化的。交给第三方容器实例化。
就能够程序拥有更好的扩展性。
DI依赖注入:
依赖注入就是能做到构造某个依赖对象时,将依赖的对象自动初始化并注入 。
有三种注入方式:
1、构造参数注入。
2、属性注入。
3、方法注入。
IOC是目标是效果,需要DI依赖注入的手段。
这里重点说一下这个控制反转,依赖注入的实现原理:
咱们想要实例化一个对象,首先应该知道类型名称吧。那控制反转也一样。不过控制反转依赖注入的前提是依赖抽象。所以咱们首先应该知道类型名称和接口名称。
而控制反转有两种。
1、一个是将类型和抽象类型写到配置文件中,然后通过读取配置文件将类型写到控制反转的一个容器中(可以是字典数组之类的容器)
2、直接将类型和抽象类型注册到控制反转的一个容器中。
这两种都是在想用的时候容器都自动给你实例化。
今天很晚了。明天晚上自己手动实现一个基本的控制反转依赖构造函数注入的控制反转工具。明天会手