SOLID五大设计原则:从设计到模式

  • 单一职责
  • 里氏替换
  • 依赖倒置
  • 接口隔离
  • 开闭原则

  • 最小知晓原则

  • 好莱坞原则

让每个程序成为过滤器

  1. ls # 显示文件
  2. # 过滤器风格
  3. ls | grep *.json
  4. ls | grep *.json | grep 'package'

设计的作用

按照那种思路或标准来实现功能
功能相同,可以有不同的设计方案来实现
伴随着需求的增加,设计的作用才能体现出来
2.jpg

《UNIX/LINUX设计哲学》

  1. 小即是美
    2. 让每个程序之做好一件事
    3. 快速建立原型
    4. 舍弃高效率而取可移植性
    5. 采用纯文本来存储数据
    6. 充分利用软件的杠杆效应(软件复用)
    7. 使用 shell 脚本来提高杠杆效应和可移植性
    8. 避免强制性的用户界面
    9. 让每个程序都称为过滤器

小准则

  • 允许用户定制环境
  • 尽量是操作系统内核小而轻量化
  • 使用小写字母并尽量简写
  • 沉默是金
  • 各部分之和大于整体
  • 寻求90%的解决方案(2/8定律)

你所设计的产品不能100%的满足用户需求,满足80%的用户

SOLID 五大设计原则

S 单一职责原则

Single Responsibility Principle
一个程序只做好一件事情,职责分离
如果功能过于复杂就拆分开,每个部分保持独立

  • 用的很多,例如 Promise的then
  • 微服务就是单一职责原则

模块化

每个模块都有明确的功能
新增功能,只需要增加模块,不需要修改原来的核心代码

  • 单一职责 & 开放封闭原则

O 开放封闭原则

Open Closed Principle
对扩展开放,对修改关闭
增加需求时,扩展新代码,而不是修改已有代码;这是软件设计的终极目标

  • jQuery的 extends
  • eggjs的 plugins机制
  • webpack的 load机制,不需要去修改 webpack的源码
    • css-load
    • file-load
    • ts-load

L 李氏置换原则

Liskov Substitution Principle
子类能覆盖父类
父类能出现的地方,子类就能出现
JS中使用较少,(弱类型,继承使用较少)

I 接口独立原则

Interface Segregation Principle
保持接口的单一独立,避免出现“胖接口”
类似于单一职责原则,这里更关注接口
JS中没有接口,使用较少,ts除外

D 依赖倒置原则

Dependency Inversion Principle
面向接口编程,依赖于抽象而不依赖具体
用户只关注接口,而不关注具体类的实现
JS中使用少,(没有接口,弱类型,php Interface )

设计模式参考
https://blog.csdn.net/u011537073/article/details/115999506