当前位置: 首页 > article >正文

别人写的代码看不懂,到底是谁的水平有问题

你突然看到某段代码用了工厂模式第一反应可能是有必要吗直接new一个对象不行吗干嘛「故意」增加阅读难度其实不是这样的当你接触过的高手多了后你会自然而然的认为高手的代码确实不太容易看懂尤其你水平还不够的时候。我不是说你菜只是每个人都会经历过这个阶段的。关键在于你得分清楚一件事到底是代码本身写得烂还是你的知识面暂时还覆盖不到这里。你觉得没必要可能是你还没遇到那个场景如果你构造的对象只是简单地设置几个属性确实没必要用工厂。直接用构造方法或者Builder就够了。问题出在另一种场景构造一个业务对象的过程本身就很复杂。拿门店进销存系统中的物料盘点模块举例。创建一张盘点单据需要做这些事情根据模板ID去查盘点模板拿到模板里配置的名称、类型、盘点日期规则调用编码生成服务按照业务规则生成单据编号把提交过来的物料数据逐条转换成明细实体把以上所有数据组装成一个完整的聚合根对象这不是简单地new一个对象然后set几个字段。整个构造过程涉及到外部服务调用、数据库查询、业务规则计算。如果这些逻辑散落在调用方的代码里那每个需要创建盘点单据的地方都得重复写一遍。用工厂模式封装这些构造逻辑代码大概长这样ComponentpublicclassStocktakingDocsFactory{privatefinalCodeGeneratorServicecodeGeneratorService;privatefinalStocktakingTemplateRepositorytemplateRepository;publicStocktakingDocsAggregateRootcreate(SubmitStocktakingCommandcommand){// 查询模板获取名称、类型、日期规则StocktakingTemplatetemplatetemplateRepository.getById(command.getTemplateId());// 生成单据编号StringcodecodeGeneratorService.generate(ModuleEnum.STOCKTAKING);// 组装明细ListStocktakingItemEntityitemsbuildItems(command.getMaterialList());// 构建聚合根returnStocktakingDocsAggregateRoot.builder().code(code).name(template.getName()).type(template.getType()).items(items).build();}}调用方只需要一行factory.create(command)就拿到了完整的聚合根对象。构造过程中涉及到的模板查询、编码生成、数据转换这些细节全部被封装在工厂内部。当你知道工厂模式就是干这个事情的时候看到对应的代码会觉得很自然。觉得绕往往是因为你还没遇到过需要它的场景。高手的代码都是精心组织过的我带过的团队里水平高的那几个人写出来的代码有一个共性都是有规划、有设计的。随意写代码对他们来说是大忌。你甚至会经常听到他们说这句话不要这搞一个那搞一个要设计和规划的。这基本是他们的口头禅了。再看一个例子。库存系统里有一个库存调整的功能不同的业务场景对库存的处理方式不一样履约扣减只减理论库存不动实际库存期初入库直接覆盖所有库存数量盘点调整先改实际库存再同步理论库存调拨/收货/报损理论库存和实际库存同时增减如果把这些逻辑全堆在一个方法里用if-else判断那个方法会膨胀到几百行而且每次新增一种场景都要在那坨if-else里再加一个分支。改的人心惊胆战因为怕影响其他分支。看看高手怎么组织这段逻辑。先定义一个策略接口publicinterfaceInventoryAdjustmentHandler{MaterialInventoryAggregateRootexecute(AdjustmentContextcontext);booleanisSupported(AdjustmentContextcontext);}每种场景一个实现类。履约扣减的处理器ComponentpublicclassFulfillmentAdjustmentHandlerimplementsInventoryAdjustmentHandler{publicstaticfinalListStatementTypeTYPESList.of(StatementType.PRODUCT_DEDUCTION,StatementType.PRODUCT_RETURNS);OverridepublicbooleanisSupported(AdjustmentContextcontext){returnTYPES.contains(context.getStatementType());}OverridepublicMaterialInventoryAggregateRootexecute(AdjustmentContextcontext){// 只扣减理论库存context.getAggregateRoot().fulfillmentAdjustment(context.getDTO());returncontext.getAggregateRoot();}}聚合根里的调用入口通过Spring容器自动发现所有处理器让它们自己判断是否适用publicMaterialInventoryAggregateRootadjustment(InventoryAdjustmentDTOdto){MapString,InventoryAdjustmentHandlerhandlersSpringUtils.getContext().getBeansOfType(InventoryAdjustmentHandler.class);handlers.forEach((key,handler)-{AdjustmentContextcontextnewAdjustmentContext(this,dto,statementType);if(handler.isSupported(context)){handler.execute(context);}});returnthis;}这种代码有一个特别重要的性质它没那么容易被破坏。新增一种库存调整场景你只需要写一个新的实现类实现isSupported和execute两个方法。已有的履约处理器、期初入库处理器、盘点处理器一行代码都不用动。新来的同事接手这段代码他能破坏的范围被限制在他自己写的那个实现类里。他不需要理解其他场景的处理逻辑也不会因为改错了一行代码导致其他场景出bug。这就是我说的「精心组织过」的含义。不是为了炫技是为了让代码在多人协作、长期维护的环境下尽量少出问题。水平提升之后你会觉得他写得真好这个认知转变的过程大部分人都会经历。一开始看到策略模式、工厂模式觉得绕觉得不直观。明明可以if-else写在一起为什么要拆成这么多类等你自己维护过一个屎山项目在一个2000行的方法里找了一下午bug改一行代码导致三个不相关的功能挂掉之后你对「代码组织」这件事的理解会完全不一样。你会开始理解那些拆成多个小类、每个类职责单一的代码不是为了好看是为了让维护者不那么痛苦。你甚至会发自内心地觉得那个人写得真好。更关键的是你自己后面也会慢慢写出那样的代码。不是刻意模仿是你理解了背后的道理之后自然而然就会那样去组织代码。这说明你成长了。从看不懂到看懂了觉得好再到自己也能写出来。这是每个开发者技术成长的必经之路。怎么判断是代码烂还是你水平不够有些代码确实写得烂看不懂不是你的问题。怎么区分这两种情况这张表可以帮你快速判断维度代码确实写得烂你水平还不够命名变量名abc、temp满天飞类名和功能对不上类名长但语义精确比如FulfillmentInventoryAdjustmentHandler结构一个方法500行什么逻辑都往里塞拆成多个小类每个类只做一件事模式没有任何模式全是if-else和重复代码用了你不认识的设计模式工厂、策略、模板方法等修改成本改一行可能影响十个功能新增功能只需加一个新类不用动已有代码一致性同样的事情三个地方三种写法整个模块的代码风格、组织方式高度统一如果你对照这张表发现让你困惑的代码在右边这一列全中了类名虽然长但意思明确结构拆得很细但每个类职责单一用了你没见过的模式但改动时不影响其他地方。那大概率不是代码的问题是你的知识储备还没覆盖到这里。这不丢人补起来就好了。小结代码组织这件事表面上看是个编码习惯的问题深一层想它反映的是一个开发者对「长期维护成本」的认知水平。写代码最容易的方式永远是把所有逻辑堆在一起这样写得最快当下理解成本最低。代价是后面每次修改都如履薄冰因为你不知道改这里会不会影响那里。高手选择多花一些时间做代码的组织和设计把逻辑拆开、把边界画清楚、把扩展点留好。短期看起来代码多了、类多了、看起来绕了。长期看每次改动的风险被控制在一个很小的范围内。团队的人来来走走代码依然能稳定地演进下去。看不懂这种代码不用焦虑。先去了解对应的设计模式理解它要解决的问题再回来看代码感受完全不同。等你有一天自己也写出了这样的代码回头看看自己当初的困惑你会觉得那就是成长的印记。最近在知乎出了「应付6000万会员的秒杀系统专栏」和「几亿用户,百万并发的C端商品系统实战」专栏感兴趣的可以订阅一下。至于知识星球的可以搜老码头的技术浮生录它是一个能实际帮你解决难题的星球。有问题的找知心的Sam哥支持无限次语音一对一解决你遇到的难题。「另外后续我新写的所有对外的付费专栏在星球内都是免费的且可以拿到所有源代码。」知识星球内后续将推出20个付费专栏覆盖电商全链路选购线用户会员营销线中后台购物车服务营销系统订单系统商品服务用户系统支付系统菜单服务结算服务从前台选购到中后台结算星球成员全部免费后续新增也不额外收费。我的知乎账号:SamDeepThinking

相关文章:

别人写的代码看不懂,到底是谁的水平有问题

你突然看到某段代码用了工厂模式,第一反应可能是:有必要吗?直接new一个对象不行吗?干嘛「故意」增加阅读难度?其实不是这样的,当你接触过的高手多了后,你会自然而然的认为:高手的代码…...

AI光学硬件加速:1.2Tb/s高光谱视频实时理解平台架构与实践

1. 项目概述:当AI遇见光,一场关于“看见”的革命最近和几个做自动驾驶和工业质检的朋友聊天,大家不约而同地提到了一个痛点:传统的RGB摄像头,甚至多光谱设备,在面对一些复杂场景时,总感觉“力不…...

从代码生成到自主学习:构建AI编程智能体的核心架构与实践

1. 项目概述:一个学习编码的智能体最近在GitHub上看到一个挺有意思的项目,叫sanbuphy/learn-coding-agent。光看名字,你可能会觉得这又是一个“教你编程”的AI工具,市面上这类产品已经多如牛毛了。但当我深入探究其代码和设计理念…...

分布式追踪深度解析:解锁微服务架构的可观测性

分布式追踪深度解析:解锁微服务架构的可观测性 一、分布式追踪的概念与价值 1.1 分布式追踪的定义 分布式追踪是一种用于监控和分析分布式系统中请求流的技术。它通过在请求流经各个服务时记录跟踪信息,帮助开发者理解系统的行为、定位性能瓶颈和故障点。…...

3步搭建个人游戏串流服务器:Sunshine让你在任何设备畅玩3A大作

3步搭建个人游戏串流服务器:Sunshine让你在任何设备畅玩3A大作 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾希望用轻薄笔记本流畅运行最新的3A游戏大作&…...

追赶行业节奏!DeepSeek计划6月推V4.1,500亿融资加速商业化转型

据The Information报道,DeepSeek告知潜在投资者将提高模型发布频率,6月将推出V4.1版本。此前其模型迭代慢,此次改变或助其从技术理想迈向商业落地。从慢到快:迭代节奏转变DeepSeek曾以技术深度闻名,但模型迭代速度长期…...

Java AI应用开发实战:langchain4j框架核心架构与生产实践指南

1. 项目概述:当Java遇上AI应用开发如果你是一名Java开发者,最近被各种AI应用搞得心痒痒,看着Python社区里LangChain、LlamaIndex等框架玩得风生水起,自己却只能对着HTTP API调参,感觉使不上劲,那么“langch…...

保姆级教程:Qwen-Image-2512-ComfyUI内置工作流怎么用?手把手教你5分钟出图

保姆级教程:Qwen-Image-2512-ComfyUI内置工作流怎么用?手把手教你5分钟出图 1. 快速部署与启动 1.1 准备工作 在开始之前,请确保你的环境满足以下要求: 显卡:NVIDIA RTX 3060及以上(8GB显存&#xff09…...

ACAI平台:基于数据湖与智能调度的MLOps实验管理实践

1. 项目概述:当MLOps遇上数据湖与智能调度在机器学习(ML)项目从研究走向生产的漫长征途中,实验管理一直是个让人又爱又恨的环节。爱的是,每一次实验都可能是通往更高模型性能的钥匙;恨的是,随着…...

第三代社保卡全功能使用指南

文章目录社保卡代际区分(因省份而存在差异)第三代社保卡申领官方推广时间节点说明申领基础条件线下申领(支持即时制卡,当场拿卡)线上申领(邮寄到家/银行网点自取)第三代社保卡全功能指南基础社保…...

Qwen-Image-2512+LoRA像素艺术作品集:Retro、Cyberpunk、Fantasy三风格实测

Qwen-Image-2512LoRA像素艺术作品集:Retro、Cyberpunk、Fantasy三风格实测 1. 像素艺术生成新体验 最近在测试Qwen-Image-2512结合Pixel Art LoRA的像素艺术生成能力时,我被它的表现惊艳到了。这个组合不仅能生成传统8-bit风格的像素画,还能…...

构式语法与AI融合:从语言认知到可解释NLP的实践路径

1. 构式语法与人工智能:一场迟来的双向奔赴如果你同时关注语言学理论和人工智能的前沿进展,可能会觉得这是两个平行世界。一边是语言学家在探讨“构式”、“形式-意义配对”和“基于使用的模型”,另一边是AI工程师在调试Transformer模型、调整…...

DeepAnalyze部署教程:基于Ollama的免配置镜像,10分钟搭建私有文本分析平台

DeepAnalyze部署教程:基于Ollama的免配置镜像,10分钟搭建私有文本分析平台 1. 项目简介 DeepAnalyze是一个专为文本深度分析设计的AI工具,它能够像专业分析师一样阅读和理解文本内容。这个工具的核心价值在于:你给它一段文字&am…...

AI项目管理中的算法偏见与包容性设计:效率与公平的平衡之道

1. 项目概述:当AI遇见项目管理,效率与公平的十字路口干了十几年项目管理,从最初拿着甘特图跟团队死磕,到后来用上各种协作软件,我原以为工具迭代的终点就是流程自动化。直到人工智能(AI)开始渗透…...

Driver Store Explorer:Windows驱动存储清理终极指南,释放数GB磁盘空间

Driver Store Explorer:Windows驱动存储清理终极指南,释放数GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间神秘消失&am…...

CANN / cann-learning-hub: Ascend C 算子工程化开发指南

【免费下载链接】cann-learning-hub CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub name: ascendc-ops-project desc…...

XUnity.AutoTranslator:5分钟掌握Unity游戏实时翻译的完整指南

XUnity.AutoTranslator:5分钟掌握Unity游戏实时翻译的完整指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法享受那些精彩的日系RPG或欧美独立游戏&#xff1f…...

AI智能体开发实战:基于agent-sdk构建可扩展的智能应用

1. 项目概述:一个面向AI智能体开发的SDK最近在折腾AI智能体(Agent)相关的项目,发现市面上虽然有不少框架,但要么太重,要么太轻,要么就是文档写得云里雾里,想快速搭建一个能跑、能扩展…...

基于verl框架和代码沙盒环境工具调用的代码强化学习实践

基于verl框架和代码沙盒环境工具调用的代码强化学习实践 【免费下载链接】cann-recipes-train 本项目针对LLM与多模态模型训练业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-train 概述 本项目基…...

美欧AI治理法案对比:从核心理念到企业合规实操全解析

1. 项目概述:从一场跨国会议引发的深度思考 去年夏天,我参加了一场关于人工智能伦理的线上国际研讨会。会上,来自布鲁塞尔和硅谷的两位专家就同一个案例——某社交媒体平台的推荐算法导致信息茧房加剧——展开了激烈辩论。欧洲的学者引经据典…...

nli-MiniLM2-L6-H768在舆情分析中的实战:识别观点冲突与一致性

nli-MiniLM2-L6-H768在舆情分析中的实战:识别观点冲突与一致性 1. 舆情分析的痛点与解决方案 在社交媒体时代,企业每天面临海量用户评论的冲击。传统舆情分析往往停留在情感分析层面,难以捕捉观点间的复杂关系。某手机品牌新品发布后&#…...

Gemma-3-12B-IT实战体验:搭建企业内部AI助手完整指南

Gemma-3-12B-IT实战体验:搭建企业内部AI助手完整指南 1. 项目背景与需求分析 在当今快节奏的技术环境中,企业内部知识管理面临诸多挑战。新员工入职需要快速掌握大量业务知识,技术文档分散在各个角落,核心成员的经验难以有效沉淀…...

[实战指南] 2026年工程图纸数字化与检验计划自动化的技术路径

在 2026 年的智能制造体系中,工程图纸数字化(engineering drawing digitization)已成为连接研发设计与质量检测的关键纽带。面对日益复杂的几何公差(GD&T)要求,传统的依靠人工在纸质或 PDF 图纸上圈选标…...

强化学习新范式:文化累积与跨代智能进化技术解析

1. 项目概述:当智能体开始“传承”经验 在传统的强化学习框架里,我们训练一个智能体,让它从零开始,在某个环境中通过试错来学习最优策略。这个过程,无论是经典的Q-Learning、策略梯度,还是如今大放异彩的深…...

DriverStore Explorer:Windows驱动管理专家,让系统重获新生

DriverStore Explorer:Windows驱动管理专家,让系统重获新生 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾经遇到过这样的困扰?Windows系统…...

2026年制造业数字化质量管理实务:从图纸识别到检验计划自动化

在 2026 年的智能制造环境下,数字化质量管理(digital quality management)已成为提升制造效率和合规性的核心。随着工业 4.0 的深入,质量管理不再局限于事后检测,而是转向以数据为驱动的全生命周期控制。本文将重点探讨…...

AI黑箱与法律归责:可解释性技术如何破解算法决策责任困境

1. 项目概述:当算法决策撞上法律边界最近几年,我身边做技术的朋友和做法律的朋友,聊天时越来越容易“吵”起来。技术派觉得,我们辛辛苦苦搞出来的AI模型,效果拔群,能预测、能分类、能生成,简直是…...

科研影响力评估:从引文指标到AI预测的量化方法与实践

1. 项目概述:当“影响力”成为一门科学 在学术圈和科研管理领域,我们每天都在谈论“影响力”。一篇论文的影响力有多大?一个学者的贡献如何衡量?一个研究机构的实力怎么评估?过去,我们可能依赖直觉、口碑或…...

别再傻傻分不清了!FreeRTOS事件组与任务通知的保姆级对比与实战选型指南

FreeRTOS事件组与任务通知深度解析:从原理到实战选型 在嵌入式实时操作系统领域,FreeRTOS凭借其轻量级和高度可裁剪的特性,成为众多开发者的首选。然而,面对其丰富的任务间通信机制,不少开发者常陷入选择困境——特别是…...

农业物联网融合智能:生物信号与AI协同的精准决策实践

1. 项目概述:当“生物大脑”遇见“硅基大脑”干了十几年农业信息化,从最初在田里拉网线、装传感器,到后来搞大数据平台、无人机飞防,我一直在想一个问题:我们是不是把农业想得太“硬”了?传感器收集数据&am…...