软件架构设计的七大原则你知道嘛!!

软件架构设计有七大原则,分别是:


1.开闭原则面试

2.依赖倒置原则算法

3.单一职责原则编程

4.接口隔离原则markdown

5.迪米特法则(最小知道原则)网络

6.里氏替换原则多线程

7.合成/聚合复用原则架构

下面分别具体说明:oop


1.开闭原则 :对扩展开放,对修改关闭

说的是,再设计一个模块的时候,应当使这个模块能够在不被修改的前提下被扩展.学习

换言之,应当能够在没必要修改源代码的状况下改变这个模块的行为,在保持系统必定稳定性的基础上,对系统进行扩展。url

例如:通常软件功能的升级就须要符合开闭原则,即不去修改原来的代码,而是去增长新功能。


2.依赖倒置原则 :实现尽可能依赖抽象,不依赖具体实现。

该原则有如下三点说明

  • 一、高层模块不该该依赖于底层模块,二者都应该依赖于抽象,
  • 二、抽象不该该依赖于细节,即具体实现类。
  • 三、细节应该依赖于抽象。

这样带来的好处,能够减小类与类之间的耦合性,提升系统的稳定性,提升代码的可读性和可维护性,而且能够下降修改程序所形成的的风险。

例如:咱们在平常开发中拿到需求以后,通常都是面向接口编程,先设计出顶层,在细节的来设计代码的结构。(以抽象为基准比以细节为基准搭建起来的架构要稳定的多)


3.单一职责原则 :对于一个类而言,应该仅存在一个能够引发类变化的缘由。

从概念来讲可能不大好理解,简单的来说,就是咱们平时在编程的时候,

会在一个类上添加各类各样的功能。当将来这些功能须要修改时, 你不得不一遍又一遍的修改这个类,并且有可能致使其余的功能发生问题, 维护起来很麻烦,很难复用,耦合性很大。

若是咱们将这些功能分别用不一样的类来实现,进行解耦,后期的需求变动和维护就会互不影响,可以下降类的复杂度,提升可读性,总的来说就是一个类、接口、方法只负责一项职责

4.接口隔离原则:客户端不该该依赖它不须要的接口,类之间的依赖关系应该创建在最小的接口上。

这个原则指导咱们在设计接口时应当注意一下几点:

  • 一、一个类对一类的依赖应该创建在最小的接口之上。
  • 二、创建单一接口,不要创建功能繁多的总接口。
  • 三、尽可能细化接口,接口中的方法尽可能少(不是越少越好,必定要适度)。

该原则符合高内聚低耦合的设计思想,可使类具备很好的可读性、可扩展性和可维护性。咱们在设计接口的时候,应该多花时间思考,既要考虑到业务模型,还须要为之后可能发生的变动作出一些预判。


5.迪米特法则(最小知道原则):一个对象应该对其余对象保持最少的了解,尽可能下降类与类之间的耦合。

因为每一个类尽可能减小对其余类的依赖,所以,很容易使得系统的功能模块功能独立,相互之间不存在(或不多有)依赖关系。迪米特法则不但愿类之间创建直接的联系。若是有真的须要创建联系的,也但愿能经过他的友元类来转达。

迪米特原则主要强调只和朋友交流,不和陌生人说话。出如今成员变量、方法的输入、输出参数中的类均可以称之为成员朋友类,而出如今方法体内部的类不属于朋友类 。


6.里氏替换原则: 一个软件实体若是适用一个父类的话,那必定是适用于其子类,全部引用父类的地方必须能透明地使用其子类的对象,子类对象可以替换父类对象,而程序逻辑不变。

即任何基类能够出现的地方,子类必定能够出现。里氏代换原则是继承复用的基石,只有当衍生类能够替换掉基类,软件单位的功能不受影响时,基类才能被真正复用,而衍生类也可以在积累的基础上增长新的行为,里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。在基类与子类的继承关系就是抽象化的具体实现,因此里氏代换原则是对实现抽象化的具体步骤的规范。

当知足继承的时候,父类确定存在非私有的成员,子类确定是获得了父类的这些非私有成员(假设,父类的成员所有是私有的,那么子类没办法从父类继承任何成员,也就不存在继承的额概念了)。既然子类继承了父类的这些非私有成员,那么父类对象也就能够在子类对象中调用这些非私有成员。因此,子类对象能够替换父类对象的位置。

  在里氏带环原则下,当需求有变化时,只需继承,而别的东西不会改变。因为里氏代换原则才使得开放封闭称为可能。这样使得子类在父类无需修改就能够扩展。


##### 咱们总结一下:子类能够扩展父类的功能,但不能改变父类原有的功能。 一、子类能够实现父类的抽象方法,但不能覆盖父类的非抽象方法。 二、子类中能够增长本身特有的方法。 三、当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。 四、当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。

使用里氏替换原则有如下优势: 一、约束继承泛滥,开闭原则的一种体现。 二、增强程序的健壮性,同时变动时也能够作到很是好的兼容性,提升程序的维护性、扩 展性。下降需求变动时引入的风险

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是个人iOS交流圈: 无论你是小白仍是大牛欢迎入驻!! 分享内容包括逆向安防、算法、架构设计、多线程,网络进阶,还有底层、音视频、Flutter等等......

本身根据梳理网络来的的开发经验总结的学习方法,无偿分享给你们。须要的话均可以自行来获取下载。 +裙:196800191、 或者是+ WX(XiAZHiGardenia)免费获取! 获取面试资料 简历模板 一块儿交流技术 (资源集合)


7.合成/聚合复用原则:尽可能使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的。

换句话说,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象经过这些对象的委派达到复用已有功能的目的。

该原则可使系统更加灵活,下降类与类之间的耦合度,一个类的变化对其余类形成的影响相对较少。

总结:学习软件设计原则,千万不能造成强迫症。碰到业务复杂的场景,咱们须要随机应变。

在实际开发过程当中,并非必定要求全部代码都遵循设计原则,咱们要考虑人力、时间、成本、质量,不是刻意追求完美,

要在适当的场景遵循设计原则,体现的是一种平衡取舍,帮助咱们设计出更加优雅的代码结构

相关文章
相关标签/搜索