• 开发设计原则


    软件开发的设计原则

    一.单一职责原则

    定义:一个类只能有一个引起它变化的原因.通俗来说就是一个类只有一个职责。

    如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会影响到其他的职责,另外,把多个职责耦合在一起,也会影响复用性。

    遵循单一职责原的优点有:

    1. 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
    2. 提高类的可读性,提高系统的可维护性;
    3. 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

    二.里氏替换原则

    定义:子类可以扩展父类的功能,但不能改变父类原有的功能,也就是说程序的行为是一样的。

    它包含以下4层含义:

    1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    2. 子类中可以增加自己特有的方法。
    3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
    4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

    三.依赖倒置原则

    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。也就是提出的 “面向接口编程,而不是面向实现编程”。

    四.接口隔离原则

    定义:使用多个专门的接口比使用单一的总接口要好。也就是说不要让一个单一的接口承担过多的职责,而应把每个职责分离到多个专门的接口中,进行接口分离。过于臃肿的接口是对接口的一种污染。

    1. 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
    2. 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
    3. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

    五.合成复用原则

    定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。新对象通过向这些对象的委派达到复用已用功能的目的。简单地说,就是要尽量使用合成/聚合,尽量不要使用继承。

    要使用好合成复用原则,首先需要区分"Has—A"和“Is—A”的关系。

    “Is—A”是指一个类是另一个类的“一种”,是属于的关系,而“Has—A”则不同,它表示某一个角色具有某一项责任。导致错误的使用继承而不是聚合的常见的原因是错误地把“Has—A”当成“Is—A”。例如:雇员、经理、学生描述的是一种角色,不应该把其与人的结构混淆。

    六.迪米特法则

    定义:一个对象应该对其他对象保持最少的了解。

    问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

    解决方案:尽量降低类与类之间的耦合。

    七.开闭原则

    定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

    问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。

    解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

    开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。

  • 相关阅读:
    vue+elementUI,前端导出表格,去除不需要的表格列
    Git撤销远端提交
    剖析 SPI 在 Spring 中的应用
    vivo大规模 Kubernetes 集群自动化运维实践
    如何在Vue项目中,通过点击DOM自动定位VScode中的代码行?
    vivo 容器集群监控系统架构与实践
    nginx rewrite
    nginx location
    IPVS
    得到 spring ApplicationContext
  • 原文地址:https://www.cnblogs.com/LTEF/p/10122503.html
Copyright © 2020-2023  润新知