软件设计原则

单一职责原则

  • 永远不应该有多于一个原因来改变某个类
  • 理解:对一个类而言,应该仅有一个引起它变化的原因
  • 应用:如果一个类拥有了两种职责,那就可以将它分成两个类

开放封闭原则

  • 软件实体扩展应该是开放的,但对于修改应该是封闭的
  • 理解:对扩展开放,对修改封闭。可以去扩展类,但尽量不要修改类
  • 应用:当需求有改动,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码

里氏替换原则

  • 理解:父类一定能够被子类替换

最少知识原则

  • 只与你最直接的对象交流
  • 理解: 低耦合,高内聚
  • 应用:做系统设计时,尽量减小依赖关系

接口隔离原则

  • 一个类与另一个类之间的依赖性,应该依赖与尽可能小的接口
  • 理解:不要对外暴露没有实际意义的接口,用户不应该依赖它不需要的接口
  • 应用:当需要对外暴露接口时,如果时非必要对外提供,尽量删除

依赖倒置原则

  • 高层模块不应该依赖于底层模块,它们应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖与抽象
  • 理解:应该面向接口面包,不应该依赖与实现类编程
  • 并不是说,所有的类都有一个对应的接口,而是有接口,尽量使用接口编程

其他设计原则

组合/聚合复用原则

  • 当要扩展类的功能时,优先考虑使用组合,而不是继承
  • 该原则在23种设计模式中频繁使用
  • 如:代理模式、装饰模式、适配器模式

无环依赖原则

  • 当A模块依赖于B模块,B模块依赖于C模块,C依赖与A模块,此时出现循环依赖
  • 在设计中避免该问题,可通过引入"中介者模式"解决

共同封装原则

  • 应该将易变的类放在同一个包里,将变化隔离出来
  • 该原则是 "开放-封闭原则" 的衍生

共同重用原则

  • 如果重用了包中的一个类,那么也就相当于重用了包中所有的类,我哦们要尽可能减小包的大小

好莱坞原则

  • Don't call me, I'll call you.
  • 控制反转 / 依赖注入
  • 不需要主动创建对象,而是由容器帮我们来创建并管理这些对象

不重复原则

  • 不要让重复的代码到处都是,要让它们足够重用,所以要尽可能的封装

保持它简单与傻瓜

  • 保持系统界面简洁,功能实用,操作方便

高内聚低耦合

  • 模块内部需要做到内度高,模块之间需要做到耦合度低

关注点分离

  • 将一个复杂的问题分离位多个简单的问题,然后逐个解决
  • 难点: 如果进行分离

你不需要它

  • 不要一开始就把系统设计的非常复杂,不要陷入"过度设计"的深渊
  • 让系统足够简单,而又不失扩展性
更新时间:
作者: dongtian