提高系统可维护性和可复用性的设计原则
1、“开-闭”原则(Open-Closed Principle,或者OCP);
一个软件实体应该对扩展开放,对修改关闭;
在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。这个原则实际上是对“对可变性的封闭原则“:找到一个系统的可变因素,将之封装起来。这个原则意昧着两点:
1) 一个可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。同一种可变性的不同表象意昧着同一个继承等级结构中的具体子类。
继承就当被看作是封装变化的方法,而不应当被认为是从一般的对象生成特殊对象的方法。
2) 一种可变性不应当与另一种可变性混合在一起。(所有类图的继承结构一般不会超过两层,不然就意昧着将两种不同的可变性混合在了一起。)
这个原则是总的原则,其它几条是这个原则的手段和工具。
2、里氏替代原则(Liskov Substitution Principle,或者LSP);
如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。
换言之,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。
反过来代换不成立。
3、依赖倒转原则(Dependency Inversion Principle,或者DIP);
要依赖于抽象,不要依赖于具体。
开闭原则是目标,而达到这一目标的手段是依赖倒转原则。
抽象层次包含的是应用系统的商务逻辑和宏观的、对整个系统来说重要的战略性决定,是必然性的体现,那么抽象层次就应当是较为稳定的,应当是复用的重点;也应当是维护的重点;而具体层次则含有一些次要的与实现有关的算法和逻辑,以及战术性的决定,带有相当大的偶然性选择。具体层次的代码是会经常有变动的,不能避免出现错误。
4、接口隔离原则(Interface Segregation Principle,或者ISP);
使用多个专门的接口比使用单一的总接口要好。
换言之,从一个客户类的角度讲:一个类对另一个类的依赖性应当是建立在最小的接口上的。
接口隔离原则与迪米特法则(下面讲到)都是对一个软件实体与其他的软件实体的通信限制。迪米特原则要求尽可能地限制通信的宽度和深度,接品隔离原则要求通信的宽度尽可能地窄。这样做的结果使一个软件系统在功能扩展过程当中,不会将修改的压力传递到其他对象。
一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此,一个接口应当简单地代表一个角色,而不是多个角色。如果系统涉及到多个角色的话,那么每一个角色都应当由一个特定的接口代表。
5、组合/聚合复用原则(Composition/Aggregation Principle,或者CARP);
组合/聚合原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到得复用已有功能的目的。
要尽量使用组合/聚合,尽量不要使用继承。
6、迪米特法则(Law of Demeter,或者LoD);
一个软件实体应当尽可能少的与其他实体发生相互作用。模块之间的交互要少。这样做的结果是当系统的功能需要扩展时,会相对更容易地做到对修改的关闭。
一个对象应当对其他对象有尽可能少的了解。
7、单一职责原则(Single Responsibility Principle,或者SRP)
在设计中为每种职责设计一个类,彼此保持正交,互不干涉。这个原则比较容易理解,这里不在多说。
分享到:
相关推荐
一个好的架构应该能够平衡可维护性和可复用性,例如,采用微服务架构可以提高系统的可扩展性和独立部署性,同时也为各服务之间的复用提供了可能。 面向对象设计的原则,如单一职责原则(SRP)、开放封闭原则(OCP)...
面向对象设计原则是软件设计中最重要的指导原则之一,它们是从许多设计方案中总结出的指导性原则,目的是为了提高软件系统的可维护性和可复用性。在面向对象设计中,有七个基本原则,即单一职责原则、开闭原则、里氏...
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。对扩展开放,对修改关闭。在程序需要...
设计模式是软件开发中的宝贵经验总结,它们是解决常见问题的最佳实践,被广泛应用于面向对象编程中,以提高代码的可读性、可维护性和可复用性。本主题主要探讨设计模式在创建可复用面向对象软件中的基础角色。 一、...
面向对象设计原则是软件开发中不可或缺的指导方针,旨在提高软件的可维护性和可复用性。这些原则是由知名软件大师如Robert C. Martin和Peter Coad等人提出的,他们认为良好的设计应具备可扩展性、灵活性和可插入性。...
通过学习设计模式,我们可以提高软件开发效率、节约软件开发成本和维护成本,同时也可以提高软件系统的可维护性和可复用性。 资源链接: * https://bugstack.cn/itstack/itstack-demo-design.html * ...
软件设计的七大原则(OOD) software设计的七大原则是指在...软件设计的七大原则是软件设计中的一些基本原则,遵守这些原则可以提高软件的可复用性、灵活性、可扩展性和可维护性,减少软件系统的耦合度和错误概率。
- **可维护性的目标**是使软件能够快速响应变化,降低维护成本,提高系统的稳定性和可用性。 **可扩展性与维护性关系** - **可扩展性**指软件系统能够适应变化,通过增加资源或者修改现有结构来满足新的需求。 - **...
编程规范是软件开发过程中的重要组成部分,它旨在提升代码质量,增强代码的可读性、可维护性和可重用性。本规范针对C#编程语言,旨在为开发者提供一套统一的标准,以降低软件维护成本,提高开发效率。 范围 本规范...
第3章 软件的可维护性和可复用性 第4章 开闭原则 第5章 专题 JAVA语言的接口 第6章 专题 抽象类 第7章 里氏代换原则 第8章 依赖倒转原则 第9章 接口隔离原则 第10章 合成、聚合复用原则 第11章 迪米特法则 第12章 ...
总之,提高软件设计的可维护性是一个复杂而持续的过程。它要求设计师、开发人员和维护人员在软件开发的各个阶段,都应充分考虑维护的需求,采用最佳实践和技术。通过这些努力,软件可以变得更加灵活和适应性强,在...
在模块设计中应用合适的设计模式能够提升软件的可复用性、可维护性和扩展性。例如,单例模式、工厂模式等都是常用的模块设计模式。 **模块设计的工具与技术** 为了提高模块设计的质量和效率,可以借助一些工具和...
这些模式经过时间的考验,被广泛应用于各种面向对象的软件开发中,以提高代码的可读性、可维护性和可复用性。本教程旨在深入讲解设计模式的基本原理和应用方法,帮助开发者构建更加健壮和灵活的软件系统。 首先,...
软件体系结构是系统设计的基础,它规定了模块的组织和交互方式,影响系统的可维护性、复用性和互操作性。常见的软件体系结构类型有共享数据的主/子程序、管道和过滤器、数据抽象和面向对象以及基于事件的隐式调用等...
第四章主要讲解的是系统设计,这是软件开发过程中的关键阶段,旨在将需求转化为具体的设计方案。...此外,良好的软件设计还可以提高软件的可扩展性、可维护性和可复用性,对于软件生命周期的长期成功至关重要。
为了防止这些问题的发生,软件工程师应重视设计原则的应用,确保软件架构具有良好的扩展性、可维护性和可复用性。 #### 软件质量的关键特性 除了设计原则之外,软件系统的质量特性也是衡量其价值的重要标准。关键...
这些模式经过时间的考验,已被证明是有效的,并且在不同的项目和团队之间可以重复使用,从而提高代码的可读性、可维护性和可扩展性。 设计模式分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对软件...
这一原则的核心在于维持良好的封装性和降低耦合度,从而提高系统的可扩展性和可维护性。 #### 二、合成复用原则的重要性 在面向对象编程中,类的复用主要通过两种方式实现:继承复用和合成复用。继承复用虽然简洁...
这样做的目的是减少类之间的依赖,提高系统的可维护性和可复用性。 开闭原则提出软件实体应当对扩展开放,对修改关闭。这意味着在不修改现有代码的基础上,通过添加新的代码来扩展系统的行为。 里氏替换原则是开闭...
面向对象设计原则是Java开发中不可或缺的指导方针,旨在提高软件的可维护性和可复用性。这些原则有助于创建更加灵活、稳定且易于扩展的系统。以下是对几个关键设计原则的详细阐述: 1. **单一职责原则 (Single ...