0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

别急着动手写代码:先想清楚这几点,后面少改八百回

工程师高培 来源:工程师高培 作者:工程师高培 2026-03-24 11:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

软件开发从来不是一次写完就结束的事情。需求会变,技术会升级,团队会流动。一套代码能跑多久、改起来顺不顺手、新同事接手快不快,这些往往比“第一次写出来”更重要。高质量软件设计与设计模式,谈一谈从原则到实践的几条路径,设计模式不是银弹,但理解背后的原则,能帮我们少走一些弯路。

一、什么算“高质量”的软件

很多人把“能运行”等同于“好”。其实软件质量分内外两层:外部质量是用户看到的功能正确、响应快、不崩溃;内部质量是代码可读、可维护、容易改。外部质量靠测试验证,内部质量靠设计保障。

判断内部质量有几个简单标准:新同事看代码能不能快速理解?改一个功能会不会牵连一堆地方?加新需求时是“加新代码”还是“改老代码”?如果答案不乐观,说明设计需要调整。

二、几个基础的设计原则

依赖反转:高层模块不应该依赖低层模块,两者都应该依赖抽象。比如业务逻辑层不应该直接依赖具体的数据库访问类,而是依赖一个数据访问接口。这样换数据库时,业务代码不用改。

开放-封闭:对扩展开放,对修改封闭。需求来了,尽量加新类新方法,而不是改老代码。这就要求设计时预留扩展点,比如用接口、抽象类把可变部分隔离开。

里氏替换:子类应该能替换父类,程序行为不变。如果正方形继承自矩形,而矩形的宽高可以分别修改,正方形就做不到,这种继承关系就有问题。

单一职责:一个类只做一件事。看类名就能猜出它的功能,如果描述不清或者有“和”字,很可能职责过多。拆开之后,每个模块更清晰,改其中一个不影响其他。

不要重复自己:同样的逻辑只写一次。重复不仅浪费,更是隐患——改一个地方忘了改其他地方,bug就来了。抽取公共方法、用模板方法、继承、组合,都是消除重复的手段。

三、设计模式:常见场景的解法

适配器模式:当系统需要对接一个外部接口,而接口的格式、调用方式与内部不一致时,加一层适配器做转换。比如对接第三方支付接口,每家参数不同,适配器封装差异,业务层只调用统一方法。

策略模式:一个功能有多种算法,需要动态选择。比如工资发放,正式员工、兼职员工、外包员工的计薪方式不同。策略模式把算法封装成独立的类,运行时切换,避免if-else堆砌。

工厂模式:当对象的创建过程复杂、或者需要根据配置选择不同实现时,用工厂来创建。简单工厂、工厂方法、抽象工厂,本质都是把“怎么创建”和“谁来使用”分开。

单例模式:一个类只需要一个实例,比如配置管理、线程池。实现时注意线程安全,懒加载还是饿汉,取决于场景。但单例容易隐藏耦合,用多了会让代码之间偷偷依赖,反而破坏设计。

模板方法模式:父类定义算法骨架,子类实现具体步骤。比如数据导出,流程是:查数据、转格式、写文件。父类写好流程,子类实现“怎么查”“转成什么格式”,既复用代码又留出变化点。

装饰者模式:不修改原类,动态给对象添加功能。比如数据源读写,业务增长后需要加缓存、加日志、加读写分离。装饰者一层层包上去,每个功能独立,需要哪些组合哪些。

四、重构:让代码慢慢变好

软件退化是常态。需求不断加,改的人换了一茬又一茬,代码慢慢就乱了。重构不是推翻重来,是小步快跑,每次改一点,始终让系统处于可运行状态。

常用的重构手法:抽方法解决大函数,抽类解决大对象,抽父类提高复用,用设计模式降低耦合,建立分层结构。关键是每一步都要验证,不能积累到受不了再动手。

五、小步快跑:降低风险的方式

很多项目不敢改设计,是因为担心改坏了。小步快跑的思路是:每次只做一小步,每一步都有明确的目标和验证方法,确保当前版本比上一版本更好。

比如加一个新需求,先写测试,再改代码;或者先重构让代码易于扩展,再写新功能。两种做法交替,既能推进功能,又能改善结构。这和先设计后编码并不矛盾,只是把设计分成了多次迭代。

六、防止软件退化的几个习惯

一是写清楚注释,不仅写“做了什么”,更要写“为什么这么做”。二是保持代码整洁,发现“坏味道”就顺手改一下,不要等到积重难返。三是团队统一编码规范,减少理解成本。四是定期进行代码评审,不仅找bug,也看设计是否合理。

软件设计不是一次性的艺术,而是持续演进的过程。工程师高培认为设计模式是工具箱里的工具,原则是选工具的准则,重构是保持工具箱整洁的方法。三者结合,才能让代码在变化中保持优雅。

wKgZPGnCCCyAUkEDAAF3YCkztlU630.png

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4975

    浏览量

    74349
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新能源充电桩4G插卡模块怎么选?认准这几点不踩坑

    随着新能源汽车普及,充电桩部署范围不断扩大,4G插卡模块(工业4G路由器)作为充电桩联网核心,直接决定设备稳定性、运维效率和用户体验,选型不当易出现断网、数据丢失、运维繁琐等问题,掌握这几个核心
    的头像 发表于 03-11 14:01 170次阅读
    新能源充电桩4G插卡模块怎么选?认准<b class='flag-5'>这几点</b>不踩坑

    苹果原装无线充电器发热怎么回事

    你的iPhone在无线充电板上“暖手”,是不是总让你心里一紧,担心电池健康或安全问题?先别急着焦虑,这种轻度至中度的发热,其实是无线充电技术原理下的“正常现象”。
    的头像 发表于 02-09 08:15 622次阅读
    苹果原装无线充电器发热怎么回事

    【正点原子STM32N647开发板试用】--手写识别

    本篇讲述触摸屏手写识别数字及大小写字母。一.实现原理 触摸显示屏在有触摸时显示并记录触摸轨迹,触摸松开后,进行手写识别。 二.代码准备 1.屏显功能 RGB屏显示功能资源文件在Drivers
    发表于 02-01 18:26

    如何选择靠谱的在线式充电机?广州邮科这几点值得关注!

    各位机房运维的朋友,是不是经常为蓄电池维护发愁?每次都要等到深夜断电操作,既影响业务又折腾人。别急,今天咱们就来聊聊在线式充电机这个"运维神器",并以行业老牌广州邮科的产品为例,说说选购时需要注意哪些要点。
    的头像 发表于 11-11 10:16 283次阅读
    如何选择靠谱的在线式充电机?广州邮科<b class='flag-5'>这几点</b>值得关注!

    用过天硕工业级SSD固态硬盘后,这几点让我很安心

    以下几点让我安心。 1. 宽温适应性出色 G40支持-40℃至85℃宽温工作,设备在零下40℃的极寒环境下也能顺利冷启动,夏季高温时长时间运行也没有降速或死机。 2. 性能稳定 G40顺序读取速度达3600MB/s,写入速度2600MB/s,支持4TB容量,即便是高频读写环境,
    的头像 发表于 07-09 17:53 929次阅读

    基于LockAI视觉识别模块:手写数字识别

    手写数字识别是一种经典的模式识别和图像处理问题,旨在通过计算机自动识别用户手写的数字。 本文将教会你如何使用基于RV1106的 LockAI视觉识别模块进行手写数字识别。 源代码:ht
    发表于 06-30 16:45

    基于LockAI视觉识别模块:手写数字识别

    手写数字识别是一种经典的模式识别和图像处理问题,旨在通过计算机自动识别用户手写的数字。本文将教会你如何使用基于RV1106的LockAI视觉识别模块进行手写数字识别。
    的头像 发表于 06-30 15:44 1256次阅读
    基于LockAI视觉识别模块:<b class='flag-5'>手写</b>数字识别

    stm32N657上部署cubeAI生成代码,编译出错的原因?怎么解决?

    你好,要怎么在stm32N657上部署cubeAI生成代码呢,编译出错,我使用cubeAI生成的手写数字模型的代码,编译报错 要怎么配置呢,我看其他AI demo都是分了两个文件,这里要怎么烧录进去使用呢?
    发表于 06-20 06:31

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别

    一些,还容易转换为verilog在fpga上面实现,后者也试了一下,但是还没有转换为verilog代码。不过听说有个工具HLS,最近也没怎么用过,后面有时间的话再折腾。 先上相关的python代码
    发表于 06-11 22:35

    【经验分享】玩转FPGA串口通信:从“幻觉调试”到代码解析

    FPGA开发,思路先行!玩FPGA板子,读代码是基本功!尤其对从C语言转战FPGA的“宝贝们”来说,适应流水线(pipeline)编程可能需要点时间。上篇点灯代码解读了基础,而如果能亲手写出串口通讯
    的头像 发表于 06-05 08:05 1219次阅读
    【经验分享】玩转FPGA串口通信:从“幻觉调试”到<b class='flag-5'>代码</b>解析

    FS2601手写擦写板集成IC中文手册

    电子发烧友网站提供《FS2601手写擦写板集成IC中文手册.pdf》资料免费下载
    发表于 05-30 15:35 0次下载

    家具别急着换新!如何使用树莓派让我的“傻瓜”设备变得更智能!

    在花大价钱购买新的智能家居设备之前,我考虑给家中已有的几台设备第二次机会。通常被视为“傻瓜”设备的灯具、电视、空调、水壶或充电器,都需要手动开启。为了让这些“傻瓜”设备变得智能,并与智能家居中心进行通信,我选择了HomeAssistant作为解决方案,同时还为智能家居项目配备了一些配件。此外,我不想拆开这些电子设备并在里面焊接芯片来让它们变得智能。相反,我选
    的头像 发表于 05-28 16:33 901次阅读
    家具<b class='flag-5'>别急着</b>换新!如何使用树莓派让我的“傻瓜”设备变得更智能!

    如何使用自定义设置调函数?

    你好,我正在尝试编写自己的自定义设置调函数,并使用 fastEnum=false。 是否有任何代码示例或资料可供我参考? void CyU3PUsbRegisterSetupCallback
    发表于 05-21 06:11

    答疑 | 3D打印的模型能当日常餐具使用吗?这安全吗?

    有些爱好3D打印的朋友好奇地咨询过一个问题:3D打印的餐具能拿来装水吃饭吗?会不会有毒啊?这安全吗? JLC3D小编直接敲黑板:别急着用!材料和工艺搞不对,真的不行!不行! 目前市面常见3D打印材料
    发表于 05-20 11:43

    液晶手写板像素缺陷修复及相关液晶线路激光修复

    引言 液晶手写板凭借便捷书写、环保节能等优势广泛应用于教育、办公等领域,然而像素缺陷会严重影响书写流畅度与显示清晰度。研究像素缺陷修复及相关液晶线路激光修复技术,对提升液晶手写板性能与用户
    的头像 发表于 05-19 09:36 1277次阅读
    液晶<b class='flag-5'>手写</b>板像素缺陷修复及相关液晶线路激光修复