modules是什么意思(程序里拆分功能的独立代码单元)
上周赶项目改后端代码,盯着终端爆红的报错弹窗愣了半个钟头,翻遍注释也搞不懂modules是什么意思,一开始刻板的认定它就是存放脚本的普通文件夹,顺手把零散代码全拖拽进同一个目录,自以为规整目录结构就能消除导入失败的提示,指尖反复敲击回车运行脚本,屏幕上的红色报错反倒一次比一次密集,连着三个小时耗在无用的文件挪动上,晚饭都搁置在桌边凉透,反正那会儿脑子里被固有认知框死,压根没想过这个词汇指代的东西和普通文件夹有着本质区别。
原先跟着网上零碎教程自学编程的时候,授课博主随口一提过模块相关内容,只潦草记了文件名后缀,完全没深挖内在逻辑,碰到项目拆分需求就凭着直觉操作,把数据请求、页面渲染、参数校验三类完全不相关的代码揉在同一个py文档里,项目体量小的时候勉强能跑通,等到对接第三方接口,代码冗余暴涨,调用环节频繁出现找不到指定modules的异常,挨个删减冗余代码排查问题,删错一段功能性代码就导致整个程序直接宕机,来回回滚备份文件,桌面密密麻麻存了七八份不同版本的项目备份,文件名胡乱标注着修改日期,从傍晚熬到深夜,中途起身接水都没心思,大半的精力全都浪费在无意义的文件复原上,越排查越烦躁,一度怀疑是开发环境的配置出了隐性故障,甚至重装过一次运行软件,到头来问题依旧摆在原处。
同事路过瞟了一眼代码目录。
随手点开项目配置文件,指着顶层的初始化文档讲明关键点,原来modules不是单纯用来收纳文件的容器,是被编译器识别、可以单独导入调用的代码单元,拆分的核心是按业务职能划分代码,不是凭使用者的收纳习惯随意归类,之前错就错在混淆了文件夹和模块的边界,空耗大把无用工时,就是没摸准编程语言识别目录的底层规则。抱着半信半疑的心态拆分现有代码,先把数据库交互的内容单独拎出来新建一个模块,在在配置路径里补全导入地址,第一次试运行的时候,部分接口已经能正常发起请求,只剩一处工具类代码跨模块调用出错,排查的时候才发现子目录缺少初始化文件,系统没法把这个文件夹识别成有效modules,补上对应文档之后,大半报错直接消失。
其实很多入门新手都容易犯同种误区,看到目录分层就默认所有文件夹都算模块,忽略编程语言自带的识别规则,之前见过隔壁实习生为了省事,整段业务代码堆在根目录,后期迭代修改的时候,改一个参数就要牵动整份源码,后续拓展新功能处处受限,返工的工作量直接翻倍,他那会还纳闷明明目录整齐,调用代码却频频报错,和我当初踩得坑几乎一模一样。
慢慢调整目录架构,逐个补全缺失的初始化文档,按功能拆分登录、订单、库存三块独立模块,原本动辄几十行的报错提示慢慢缩减,到凌晨两点,绝大多数接口都恢复正常运转,只剩一个冷门测试接口还存在异常,懒得深挖细节,索性临时注释掉这段代码先交付基础版本,余下的小故障打算留到第二天空闲的时候再慢慢调试。
往后翻看往期写的小爬虫脚本,才察觉早期写的简易采集程序,无意识拆分过小型的modules,只是当时不懂概念,误打误撞契合了模块设计逻辑,白白错过早点吃透知识点的机会,要是早些弄懂词义,之前数个小项目都不用反复推翻重构,省下不少熬夜调试的时间。
关灯躺倒在床上,脑子里还盘旋着白天错乱的目录排布,枕边的纸质笔记胡乱摊开,边角沾了刚才倒水撒落的水渍。