软件架构设计原则

1.开闭原则
对扩展开放,对修改关闭。发挥java面向对象的继承和多态特性。
抽象出包含基础属性的接口或抽象类,然后在具体的实现类或子类中去定义特有的方法。尽量不修改接口和父类,有新需求或版本更新的时候尽可能的不修改源代码,但可以增加新功能。
先抽象出最具基础特征的接口或抽象类。然后抽象出基础的实现类,再在类的基础上设计实现更细的子类。
例如在一套教育系统中,要做有关人员的模块。先抽象出一个接口【人】然后其具体实现类可以有【学生】【老师】新增需求后可以再添加【校长】【教导主任等】学生可以继续有其子类【小学生】【初中生】【高中生】需求新增后可以继续有【本科生】【专科生】【研究生】
向下可继续分类高中生可以继续有子类【文科生】【理科生】新增需求后可以继续添加【体育生】【艺术生】。
以文科生举例
基础接口人中设置方法【工作】
学生实现类中的工作方法输出【学习】
高中生工作方法输出【学习高中课程】
文科生工作方法分别调用了三分方法【学习历史】、【学习政治】、【学习语文】
当有新需求出现时,只需要定义一个新的类【体育生】工作方法分别调用【学习体育】、【学习语数外】 甚至更细的新需求出现时可以再定义体育生的子类【篮球生】【田径生】工作方法调用【学习体育】、【学习语数外】 学习体育方法又调用【学习篮球实战】【学习篮球战术】
以此每一个新需求出现时可以尽量减少对已有代码的改动只新增新的代码即可。

2.依赖倒置原则
高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。spring中的依赖注入就是如此

依赖就是如果一个类A中的方法或属性需要依赖B去实现,则称A依赖B。比如一个存在一个【学生】类一个【课程】类 【学生】类的学习方法需要依赖【课程】类实现。则成学生类依赖课程类。

在进行代码设计时,学生需要学习不同的课程如果设计成使用学生类中的不同方法实现比如学生类中分别存在三个方法,学习语文学习数学学习英语,如果新增需求学习体育就需要修改学生这个基础类。

如果设计成学生只有一个学习方法,通过传入课程参数,完成不同课程的学习,在新增需求的时候就可以新增课程实现类即可。
第一种方式就是以细节为基准设计代码,第二种就是以抽象为基准设计代码。

以抽象为基准设计的架构要比以细节为基准设计的代码稳固的多。

3.单一职责原则

尽可能的让一个类、方法、接口只负责一项工作,不要存在多于一个导致类、方法、接口变更的原因。以减少耦合减少修改带来的引入性问题。

4.接口隔离原则
尽量使用多个单一接口而不是符合的总接口,实现类中不应该依赖它不需要的接口或者说不需要实现它不需要的方法。
所以进行接口设计的时候需要注意:
1.尽量建立单一的接口,不要建立庞大复杂的接口
2.尽量细化接口,接口中方法尽量少

比如接口实现了ABC三个方法 但是实现类甲只需要AB两个方法,实现类乙只需要BC两个方法,此时显然因为只有一个接口,实现类中都会出现无用的方法。所以不如拆分成三个接口

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页