最近 AI 实在是太凶了,大家都沉迷于对 AI 发号施令,然后发现一大堆报错的代码被写出来。(事实上你可能自己也看不懂 AI 写的代码)。
当然懂 AI 的人,晓得使用 Prompt Engineering 嘛。不过我还是想巩固一下软件工程的基本功。
面向对象、设计原则、设计模式、编程规范、重构。
编程范式/编程风格
主流的编程范式/编程风格有三种:
- 面向过程
- 面向对象
- 函数式编程
其中,面向对象这种编程风格又是其中最主流的。(现在比较流行的编程语言大部分都是面向对象编程语言)。
设计原则
解释定义:代码设计的经验总结。
原则一般听起来很抽象,定义描述比较模糊。
难点:需要掌握设计初衷、能够解决哪些编程问题,有哪些应用场景。
常用的设计原则如下:
SOLID 原则
也许你会有疑问,为什么就只有 SOLID 原则会有五个额外的类似于子原则的东西。
咳咳,我也有这个问题,所以我查了,查到了。
SOLID 被称为面向对象设计的基石,是因为它提供了一套具体而非抽象的工具,用于解决软件开发中的实际问题。
每个子原则针对的是不同层面的设计缺陷。它之所以特殊,恰恰是因为它不是一个模糊的单一规则,而是五个具体、可操作的设计原则的组合
- 单一职责原则 (Single Responsibility Principle)
- 开闭原则 (Open/Closed Principle)
- 里氏替换原则 (Liskov Substitution Principle)
- 接口隔离原则 (Interface Segregation Principle)
- 依赖反转原则 (Dependency Inversion Principle)
- 简洁设计原则
KISS原则 (Keep It Simple, Stupid)
DRY原则 (Don't Repeat Yourself)
YAGNI原则 (You Aren't Gonna Need It)
LOD 法则
设计模式
解释定义:针对于软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。
大部分设计模式要解决的都是代码的可扩展性问题。
难点:了解它们都能解决哪些问题,掌握典型的应用场景,并且懂得不过度应用。
有哪些:经典的设计模式有 23 种。
随着编程语言的演进,
一些设计模式(比如 Singleton)也随之过时,甚至成了反模式;
一些则被内置在编程语言中(比如 Iterator);
还有一些新的设计模式诞生(比如 Monostate)。
23 种经典的设计模式,可以分为三大类:创建型、结构型、行为型。
创建型
常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。
不常用的有:原型模式。
结构型
常用的有:代理模式、桥接模式、装饰者模式、适配器模式。
不常用的有:门面模式、组合模式、享元模式。
行为型
常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。
不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。
编程规范
定义解释:主要解决的是代码的可读性问题。相对于设计原则、设计模式,更加具体、更加偏重代码细节。即便你可能对设计原则不熟悉、对设计原则不了解,最起码掌握基本的编码规范。
比如,如何给变量、类、函数命名,如何写代码注释,函数不宜过长、参数不能过多等。
这一块有很多经典的书可以去看就完事了,《重构》、《代码大全》、《代码整洁之道》等。
这一块每条编码规范都很简单、明确,记一下就行了,只需要照着来就可以。不像设计原则,需要融入很多个人的理解和思考。
重构
只要工程一直在进行,这个项目一直有人,那么软件就会需要持续迭代,那么新的功能需求一定会推动着之前的需求进行代码重构,这是保证代码质量不下降的有效手段。有效避免代码腐化到无可救药的地步。
而重构的工具,就是之前提到的所有的那些,编程范式、设计原则、设计模式、编程规范。
虽然使用设计模式可以提高代码的可扩展性,但过度不恰当地使用,也会增加代码的复杂度,影响代码的可读性。
在开发初期,除非特别必须,我们一定不要过度设计,应用复杂的设计模式。
而是当代码出现问题的时候,我们再针对问题,应用原则和模式进行重构。
这样就能有效避免前期的过度设计。
务必掌握的知识点
如下:
- 重构的目的(why)、对象(what)、时机(when)、方法(how);
- 保证重构不出错的技术手段:单元测试和代码的可测试性;
- 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
五者之间的联系
关于面向对象、设计原则、设计模式、编程规范和代码重构,这五者的关系如下:
- 面向对象编程因为其丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
- 设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则” 是很多设计模式(策略、模版等)的指导原则。
- 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。
- 编程规范主要解决的是代码的可读性问题。编程规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。
事实上这篇文章主要的作用就是,为了编写高质量代码这一件事。当追本溯源,之后很多事情怎么做,代码怎么实现,就清楚了。

ps:再附上一大堆关键词,可以慢慢看。
系统架构原则 高内聚低耦合原则 最小知识原则(迪米特法则) 组合优于继承原则 关注点分离原则 契约式设计原则 云原生设计原则 弹性设计原则 可观测性原则 不可变基础设施原则 服务自治原则 声明式配置原则 安全设计原则 纵深防御原则 最小权限原则 安全默认配置原则 职责分离原则 失效安全原则
Comments