pp看书笔记---设计模式之禅第二版 第三章【依赖倒置原则】

定义

高层模块不应该依赖底层模块,两者应该依赖其抽象
抽象不应该依赖实现,实现应该依赖抽象


作者阐释名词

高层模块:就是组件、类库……
底层模块:单一类
抽象:接口
实现:具体实现的变量、方法、类


我对定义的解析

这个原则真的特别重要(和其他原则相比),很有感受

在此之前:

这个原则的目的:让我们使用接口、面向接口编程,这个道理我懂,但是一直不是真懂,两年前我开始画UML(画的很少),知道做之前先设计,但是往往大多几乎都是先做。后来有些项目也是和他人合作开发其中一个模块,但是不正规的开发方式,没有什么所谓接口。

现在:

作者写的真的很好,我看完后明白接口不应该怕,设计不好也是正常,不去试试永远没法变得强大,所以前几天看完这章后,在现在独立完成的项目中添加了IProject等4个接口。
这里写图片描述


我的实践:

我怎么做的:
1. 我将这些接口放入一个外接的工程中
2. 在此工程中引用A公司数据接口实现这些我定义的接口
3. 在此工程定义一个总体管理的类,里面放置所有接口对象,以及接口中的方法
4. 在Main程序中有接口对象,调用总体管理类中的方法

我这样做的好处:
1. 接口明确,我牛逼哄哄的说自己在做设计
2. 扩展容易,我牛逼哄哄的说换了B公司的接口和部分需求,很容易改

我这样做的坏事:
本来以自己之前这样面向程序的方式开发,开发的会轻松些,但是接口引用进来后,自己也是晕头转向,因为其中有以下的情况:
1. 使用了接口
2. 接口之中使用接口
3. 接口之中怎么定义(不是指语法,指设计层次)

我在做的过程中思考的问题:
1.怎么扩展
描述:
(1)我在B工程定义接口IProject,以及该接口的实现类
(2)我在A工程中引用B工程的该接口
(3)那我怎么做才能改天用另一个IProject的实现类的时候,不需要去改动A工程?
解决:
(1)我在B工程定义了一个SdkManager的类,在该类中有一个IProject字段
(2)在该类中的构造中将IProject字段实例化为第一个实现类
(3)在该类中定义一系列接口中拥有的方法
(4) 在该些方法中仅是用接口字段调用接口方法
(5)我有一天扩展,只需要添加一个新的实现类,修改B工程这里IProject字段实例化为新实现类对象

2.怎么定义接口
描述:
(1)既然接口中的方法直接用来调用,方便扩展,那一定得通用,那一定要定义好接口中的成员
(2)那怎么定义接口才合理?
解决:
【入库】(将一个对象入库、如果库中没有则入库,有但属性不同,则修改、有且属性相同,则无需入库)
(1)我定义一个接口IWrite
(2)该接口中有一个写入的方法int Write(CustomObj obj);
(3)但是根据需求的话,我们需要将传入的设备进行检索、刷新、写入操作,甚至这些操作还耦合实现的细节
(4)实现类中可以自由发挥实现,但是只要做到一点就是仅调用Write方法,传入CustomObj,返回int我就知道操作的结果【这应该就是作者说的“细节依赖抽象,抽象不依赖细节”】

3.怎么定义接口
描述:
(1)我在主程序需要输出报表、读取XML文件,将工程目录下一个指定文件夹目录列出来……
(2)这样我需要获取上述这些的Path,且都不同
(3)但是我发现放在IProject的实现类中可以很容易获取
(4)但是我调用的是接口对象,意味着如果我在IProject中实现,那IProject中也需要定义虚方法
(5)但是这属于细节方法,不属于抽象,定义在接口中好吗?合适吗?
解决:
(1)我权衡再三,还是定义到了接口中,仅仅是因为写程序写的很很方便、修改也不需要修改Main程序,及时扩展B公司的话,我也好更改(这里就是作者结尾时候说的审时度势的意思
这里写图片描述

4.接口之间怎么耦合
描述:
(1)我入库的接口IWrite需要一个打开的工程对象Project
(2)Project对象在IProject实现类SpdProjectSdk的一个成员
(3)两个接口怎么耦合呢?
解决:
(1)我一开始在IWrite接口中定义了IProject属性
(2)在实例化IWrite接口对象时给它IProject赋值IProject对象
(3)这样后我在IWrite的实现类就可以用够Project对象,使用它的成员Project,为所欲为了
(4)但是我发现这样做我本能的不开心,因为我在下面的多个private方法中需要Project属性,经常需要转化,例如(IProject as SpdProjectSdk).Project
(5)所有我将接口中依赖的接口属性去除,在IWrite的实现类中定义Project对象成员字段,构造中传入IProject类型,构造中转换一次(这里面有接口依赖,也叫接口注入,后面用构造注入依赖对象,这是作者传递依赖的三种方法其中两种


我学到的:

1.使用接口的勇气
2.依赖注入的含义、方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值