我的博客

分享技术与生活

软件架构师的基本素养

在不改变接口的情况下实现添加功能;

组件设计折中选择复用性与可维护性;Nc

1、单一职责原则(SRP)

每个函数只做一件事情;

每个模块仅对一类行为主体负责类,对外只能提供一种功能,而引起类变化的原因应该只有一个。

主体:actor,一类人,有着相同的系统变更需求;

内聚:将对某类行为主体负责的代码绑定;

模块:一组内聚的函数、数据集合;仅对一类行为主体负责。

要求:

  1. 分离不同主体依赖的代码;

反例:

  1. 一个类中的是三个接口,被三个不同的主体调用;
    1. 负面影响:一个主体需求的变化,影响到另一个主体;(比如共用了底层接口)

常用措施:

  1. 数据与函数分离;负面影响:导致实例化类数量增加;
  2. 外观模式:使用一个类负责实例化所有相关对象;

2、开闭原则(OCP)

对象对扩展开放,对修改关闭,即扩展无需修改现有代码;

更改封闭拓展开放:通过子类继承父类,重写父类虚函数。
对类的改动是通过增加代码进行的,而不是修改现有的代码。
也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直运行下去。这需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现则是可以改变的和扩展的。

3、里氏替换原则(LSP)

在任何父类出现的地方都可以用它的子类来替代,程序的行为不变。

即:同一个继承体系中的对象,应该有共同的行为特征。

反例

正方形不是矩形的子类;

4、接口隔离原则(ISP)

不应该强迫程序依赖他们不需要的方法,即 一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。

5、依赖倒置原则(依赖注入原则)(DIP)

要依赖于抽象,不要依赖于具体的实现。(接口比实现稳定)

即在应用程序中,所有的类如果使用或依赖于其他的类,则应该依赖于这些类的抽象类,而不是类的具体类。

为了实现这一原则,就要求我们在编程的时候针对抽象类或者接口编程,而不是针对具体的实现编程。

0%