软件设计原则

本文介绍了软件设计中的核心原则,包括开闭原则、依赖倒置原则、里氏替换原则、单一职责原则、接口隔离原则以及设计模式的应用。强调了这些原则在软件设计中的重要性,如减少代码修改、提高可扩展性和可维护性。同时,探讨了领域驱动设计(DDD)中的领域模型和实体、值对象的概念,强调了对业务理解的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 开闭原则

开闭原则:软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的

通俗地说,就是不修改代码就实现需求的变更
软件设计需要遵循的最基本的原则:开闭原则
开闭原则可以说是软件设计原则的原则,是软件设计的核心原则,其他的设计原则更偏向技术性,具有技术性的指导意义,而开闭原则是方向性的,在软件设计的过程中,应该时刻以开闭原则指导、审视自己的设计

if/else 和 switch代码,违反了开闭原则

2.依赖倒置原则

  • 高层模块不应该依赖低层模块,二者都应该依赖抽象。
  • 抽象不应该依赖具体实现,具体实现应该依赖抽象。

依赖倒置原则也被称为好莱坞原则:Don’t call me,I will call you. 即不要来调用我,我会调用你
依赖倒置原则通俗说就是,高层模块不依赖低层模块,低层模块也不应该依赖高层模块,而是都依赖抽象接口,这个抽象接口通常是由高层模块定义,低层模块实现。

遵循依赖倒置原则有这样几个编码守则:

  1. 应用代码中多使用抽象接口,尽量避免使用那些多变的具体实现类。
  2. 不要继承具体类,如果一个类在设计之初不是抽象类,那么尽量不要去继承它。对具体类的继承是一种强依赖关系,维护的时候难以改变。
  3. 不要重写(override)包含具体实现的函数。依赖倒置原则最典型的使用场景就是框架的设计

依赖倒置原则最典型的使用场景就是框架的设计。框架提供框架核心功能,比如 HTTP 处理,MVC 等,并提供一组接口规范,应用程序只需要遵循接口规范编程,就可以被框架调用。程序使用框架的功能,但是不调用框架的代码,而是实现框架的接口,被框架调用,从而框架有更高的可复用性,被应用于各种软件开发中。

3. 里氏替换原则(继承)

若对每个类型 T1 的对象 o1,都存在一个类型 T2 的对象 o2,使得在所有针对 T2 编写的程序 P 中,用 o1 替换 o2 后,程序 P 的行为功能不变,则 T1 是 T2 的子类型。

通俗地说就是:子类型必须能够替换掉它们的基类型。
再稍微详细点说,就是:程序中,所有使用基类的地方,都应该可以用子类代替

里氏替换原则 要求子类可以无缝的替换父类,比父类更松
要注意的是,能不能替换是要看应用场景的,所以在设计继承的时候就要考虑运行期的场景,而不是仅仅考虑父类和子类的静态关系。

4.单一职责原则

一个类,应该只有一个引起它变化的原因

面向实现者
实践中,就是类文件尽量不要太大,最好不要超过一屏

5. 接口隔离原则

不应该强迫用户依赖他们不需要的方法

面向调用者
方法主要是通过对接口的多重继承,一个类实现多个接口,不同接口服务不同调用者,不同调用者看到不同方法

6. 设计模式

设计模式的精髓就是对多态的灵活应用
只要可重复用于解决某个问题场景的设计方案都可以被称为设计模式

策略模式是一种行为模式,多个策略实现同一个策略接口,编程的时候 client 程序依赖策略接口,运行期根据不同上下文向 client 程序传入不同的策略实现
适配器模式是一种结构模式,用于将两个不匹配的接口适配起来,使其能够正常工作
观察者模式是一种行为模式,解决一对多的对象依赖关系,将被观察者对象的行为通知到多个观察者,也就是监听者对象
模板方法模式,就是在父类中用抽象方法定义计算的骨架和过程,而抽象方法的实现则留在子类中

7.DDD领域驱动设计

领域模型是合并了行为和数据的领域的对象模型。通过领域模型对象的交互完成业务逻辑的实现,也就是说,设计好了领域模型对象,也就设计好了业务逻辑实现。和事务脚本被称作贫血模型相对应的,领域模型也被称为充血模型。

事务脚本模式的特点在于状态都在数据库里,业务逻辑在service层,业务逻辑与状态完全分离。
领域对象模型,特点是聚合状态和操作,提供相对独立的模块和类。领域的模型的对象之一是实体,有唯一标识,实体被销毁前标识不变,能通过标识获得,实体的状态会变化。领域的另外一种对象是值对象,状态在生命周期内不变,因而更简单。领域对象因为有状态可以表达更为丰富的关系。但是设计好的领域对象依靠的主要不是技术而是对业务的理解。

领域驱动设计就是从领域出发,分析领域内模型及其关系,进而设计软件系统的方法
在 DDD 中,领域模型对象也被称为实体
事实上,并不是领域内的对象都应该被设计为实体,DDD 推荐尽可能将对象设计为值对象
通过领域实体及其交互完成业务逻辑处理才是 DDD 的核心目标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值