3.七大软件架构设计原则

2021年09月16日 阅读数:2
这篇文章主要向大家介绍3.七大软件架构设计原则,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1.开闭原则

概念

  1. 一个软件实体(类、模板和函数),应对扩展开放,对修改关系(经过配置文件修改)。
    软件实体:项目中划分出的模块、类与接口、方法
  2. 所谓开闭,也正是对扩展和修改两个行为的一个原则。
  3. 核心:面向抽象原则用抽象构建框架,用实现扩展细节,提升软件的可复用性和可维护性。

含义

当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,能够扩展模块的功能,使其知足新的需求。spring

做用

开闭原则是面向对象程序设计的终极目标,它使软件实体拥有必定的适应性和灵活性的同时具有稳定性和延续性。具体来讲,其做用以下。编程

  1. 对软件测试的影响
    软件遵照开闭原则的话,软件测试时只须要对扩展的代码进行测试就能够了,由于原有的测试代码仍然可以正常运行。
  2. 能够提升代码的可复用性
    粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程能够提升代码的可复用性。
  3. 能够提升软件的可维护性
    遵照开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。

实现方法

能够经过“抽象约束、封装变化”来实现开闭原则,即经过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中架构

由于抽象灵活性好,适应性广,只要抽象的合理,能够基本保持软件架构的稳定。而软件中易变的细节能够从抽象派生来的实现类来进行扩展,当软件须要发生变化时,只须要根据需求从新派生一个实现类来扩展就能够了。框架

eg:建立商品接口,并实现商品接口,添加折扣优惠方法函数

方案1:将修改置于接口,则每一个实现类都要添加方法实现
方案2:再写一个处理优惠的逻辑类
  • 优势:易提升软件的可复用性和维护性
  • 缺点:易引发类爆炸
方案3:利用IOC框架(Spring)动态建立对象
public  static void main(String []args){
     //建立Spring容器,解析xml文件; 
     // ApplicationContext为一接口,new后面的是它的实现类,参数为xml配置文件
    ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
   //根据Bean的id查找对象
    HelloBean helloBean=(HelloBiz)context.getBean("helloBean");
    System.out.println(helloBean. getPrice());
 }
}

2.依赖倒置原则(Dependence Inversion Principle)

概念

  • 底层模块:不可分割的逻辑
  • 高层模块:逻辑的再组装
  1. 高层模块不该该依赖底层模块
  2. 二者都应依赖其抽象不该依赖其细节
  3. 细节应该依赖抽象

核心思想是:要面向接口编程,不要面向实现编程。测试

原则:经过面向接口的编程来下降类间的耦合性.主要规则有如下四点:
1.每一个类尽可能提供接口或抽象类,或者二者都具有。
2.变量的声明类型尽可能是接口或者是抽象类。
3.任何类都不该该从具体类派生。
4.使用继承时尽可能遵循里氏替换原则。设计

什么是抽象

抽象就是指接口或抽象类,二者都是不能直接被实例化的code

什么是细节

细节就是实现类,实现接口或继承抽象类而产生的类就是细节
特色就是能够直接被实例化xml

依赖倒置原则

  1. 模块间的依赖经过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是经过接口或抽象类产生的;
  2. 接口或抽象类不依赖于实现类;
  3. 实现类依赖接口或抽象类。

IOC (Inverse of Control) 控制反转

  1. 设计好的类由系统控制,而不是在类的内部控制,称为控制反转。
  2. 建立具体对象的控制权交给配置文件(Java或者C#经过反射机制动态建立对象)。

控制反转&依赖注入

控制反转IoC

  • 对象的控制权进行转移

eg. 转移交给了IoC容器,它就是一个建立工厂。
须要的对象能够经过配置文件建立
依赖关系发生变化:原先的依赖关系消失,由于它们都依赖IoC容器。经过IoC容器创建它们之间的关系。对象

依赖注入

所谓依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中

注入方式:

  1. 构造函数注入
  2. setter注入
  3. 基于注解的注

总结

依赖倒置的基本要求:
  1. 每一个类尽可能都有接口或抽象类,或者抽象类和接口二者都具有
  2. 接口和抽象类都是属于抽象的,有了抽象才可能依赖倒置。
  3. 依赖倒置原则的本质就是经过抽象(接口或抽象类)使各个类或模块的实现彼此独立,不互相影响,实现模块间的松耦合
  • 变量类型尽可能是接口或者是抽象类
  • 任何类都不该该从具体类派生。(不必定)
  • 尽可能不要覆写基类的方法:
    若是基类是一个抽象类,并且这个方法已经实现了,子类尽可能不要覆写。类间依赖的是抽象,覆写了抽象方法,对依赖的稳定性会产生必定的影响。

3.单一职责原则

4.接口隔离原则

5.迪米特法则

6.里氏替换原则