总结2

2020-06-18  本文已影响0人  yz08150

软件设计的臭味,即一些不好的地方

软件设计的最终目的是达到 "强内聚、松耦合",以使软件 :

不好的软件,会发出如下的"臭味" :

对象 和 面向对象

对象

对象具有 状态 行为 标识 三个特性

面向对象编程三要素

封装
继承
多台

框架 和 库工具

框架 :
是用来实现某一类应用的结构性程序,是对某一类架构方案的可复用设计与实现

框架只是提供了一个架子,里面具体的功能需要自己提供
是需要向里面填充东西的,
框架就像一个房子,有客厅、卧室、卫生间、厨房,但是,具体什么样,最终的功能什么样,还得自己实现

框架,调用你的东西,你并不需要调用框架的东西
比如说插件,插件就是一个框架

库,就是一个工具,直接使用即可,库提供了自己的功能,用户只是需要使用它的功能

架构师使用框架来保证架构的落地
注意,架构师,应该多关注框架,多关注框架的思想
架构师使用库工具来提高开发效率

OOD原则,即 Object-Oriented Design,面向对象设计的原则

包括 SOLID 原则,一共 六个原则,其中有两个 L开头的原则

S 单一职责原则 Single Responsibility Principle SRP

一个类,只有一个引起它变化的原因

什么意思?
什么是职责?
暂时只能理解为行为,对象三要素中的行为,行为功能是单一的

O 开/闭原则 open/close principle OCP

这个歌 扩展 和 更改 指的是更改这个 类,而不是类实例中的数据
比如加个字段,删个字段,加个方法等等

L 里氏替换原则 Liskov替换原则 LSP

Is-A 的问题:
Is-A 是关于对象的行为的
对象包含 标识、状态、行为,只有 行为是相同的,其他是不同的
只有行为相同,才是 Is-A,才能符合 Liskov替换原则

L 迪米特法则 Law of Demeter

只和亲密的人交谈,不和陌生人说话

也就是说,两个软件实体,如果不应该发生直接的相互调用,就不应该相互调用,可以通过第三方交互

I 接口分离原则 Interface Segregation Principle ISP

SRP 指出如何设计一个类
ISP 指出如何设计一个接口

D 依赖倒置原则 Dependency Inversion Priciple DIP

怎么理解
高层、低层模块,可以按数据流向来分析,数据来源是高层,数据接收者是低层,也可以按照调用顺序来区分,调用者高层,被调用者低层
举个例子,
通常而言,遇到的情况时 高层模块 A -> 调用低层模块 B 提供的接口的方法。
比如各种各样的库,都是这样,提供一个接口,然后用户调用这个接口对象的方法
再比如,controller 调用 service 接口,去操作数据库等等

现在,需要倒置过来,即 A 提供一个接口,然后在 A 中,A 主动的调用这个接口,然后,低层 B 去实现 A中的接口,并且 A 持有 B 对象实现的一个抽象接口,这样的话,A 就可以自动的调用B实现的功能。也就是说,B现在依赖的是高层A提供的接口,而不是A去依赖B了

A : 接口 IA,IA 的方法 funcA

B : implements IA

然后 A 持有 B 实现的 IA,这样的话,A 就可以 调用 IA.funcA()
A 不依赖 B,B也不依赖A,双方都只依赖 IA

另外的常见的例子,比如插件,软件提供了插件接口,用户可以实现各种功能的插件模块,软件会调用这个插件,以提供插件的功能

DIP 倒置了什么?

软件的层次化:

框架的核心 : 好莱坞规则 : Don't call me, I'll call you.
框架倒转了层次依赖关系

上一篇 下一篇

猜你喜欢

热点阅读