架构师实现自己架构目标的主要手段
面向对象编程三要素
封装性
隐藏实现细节
定义接口
继承性
is-a
has-a
多态性
后期绑定
向上转型
面向对象设计的目的和原则
目的
强内聚、低耦合
易扩展 - 易于增加新的功能
更强壮 - 不容易被粗心的程序员破话
可移植 - 能够在多样的环境下运行
更简单 - 容易理解、容易维护
臭味
僵硬 - 不易改变
脆弱 - 只想改 A,结果 B 被意外破坏
不可移植 - 不能适应环境变化
导致误用的陷阱 - 做错误的事比做正确的事更容易,引诱程序员破坏原有的设计
晦涩 - 代码难以理解
过度设计、copy-paste 代码
原则
开闭原则 OCP
open/closed principle
对扩展是开放的
对更改是封闭的
依赖倒置原则 DIP
dependency inversion principle
高层模块不能依赖底层模块,而是大家都依赖抽象
抽象不能依赖实现,而是实现依赖抽象
框架的核心:don't call me, i'll call you
Liskov 替换原则 LSP
子类型必须能替换掉它们的基类型
单一职责原因 SRP
single responsibility principle
内聚性原则
接口分离原则 ISP
interface segregation principle
不应该强迫客户程序依赖它们不需要的方法
框架 VS 工具
用框架来保证架构逻辑
用工具来提高开发效率
继承 VS 组合
继承的优点:比较简单,基类大部分功能通过继承直接进入子类
继承的缺点:
破坏了封装,更多细节暴露给子类
当基类改变时,可能会层层影响其下的子类
继承是静态的,无法运行时改变组合
类数量的爆炸
应该优先使用组合
评论