雷学委趣谈编程 大型鞋厂与开发工程化

简介: 朋友们,小白奶奶上次听雷学委趣味故事学会了类和对象。

回去狂写代码,写了很多代码,面向对象,继承,多态,入门,初级的统统都写了。


雷学委既想表扬,又不能! 毕竟,老人这样猛敲代码,对身体不好! 不过老人代码写的很不错,小白看了想要整理汇编成一个新手填坑展示项目(挺有头脑啊!不愧是遗传!)


跑过来找学委,你看我奶奶这代码,好多个文件夹,请问怎么样把这些组织好,方便代码分享啊?


哇,项目工程化这一块很重要啊,很多小白写很多代码最后还是零散分布的,没有形成自己的积累,其实很亏!


效果如下,可惜端午节过去太久,雷学委只能顺着鞋厂大学问再深入讲解,不然给大伙讲如何工程化包粽子也不是不行呢。


image.png

雷学委趣味编程配套食用:一个Java项目的简单工程化

image.png

来,我们一起看看,王总的大型鞋厂一条龙

大企业家王总,虽是半路出家做鞋子,可做事一点也不迷糊。


他经历过一块块砖头,一车车水泥沙石钢筋堆砌成一层层楼房的时候,也经历过一栋栋一片片的房屋出售的冲锋时刻,啥场面没见过。


自然想的已非个人亲手做一只只鞋起家,而是直接联系了很多大鞋厂老板,说要给他们投资,结果参观学习了3个月,探访了不少不同规模鞋厂。


王总:想要搞大规模,就必须把体系做好。所以转型做鞋子,第一步,得把整个工程生产线搭建好,不然别的都是白干费力!

雷学委认为做软件也是如此,工程化是很重要的。高效的组织代码,构建高质量代码产品,对个人对企业都是很有帮助的!


小白直呼,商人特么精明!这手段玩的是一套一套的,要是王总写代码不知道得多6!


鞋子是怎么来的?

原料: 鞋底,鞋带,皮革,缝合线等等的。这些组合而成就是一只鞋子,然后再成对匹配。


这些肯定都标准化,每双鞋都是同一系列的步骤照做的,不然最好做出来的鞋子形状千奇百怪,怎么做好销量?(又不是搞个人定制鞋款的)


说到这,小白好像突然开窍了,插嘴说:您是不是想说,这些玩意就跟我们的源代码一样?


小白激动地说:做好的鞋子,那就是相对于发布的一个jar包啊?!


哈哈哈,小白说出这个理解,学委很开心。

这样讲解工程化就好理解了!这里补充一下jar包,这是我们java同学有时候写了一些代码直接打个jar文件,包含程序发给别人直接运行。有点类似python的whl包,但是有区别,whl包只能用pip安装后在代码使用。


不错哟! 小白悟性是越来越好了。


小白又问,那继续说说具体工程化吧?手动打包搞多了挺累的,有时候漏了被同学嘲笑还得再来!


好的,让我们继续看看王总怎么做的呗。(下图为鞋底机械自动成型)


image.png

(图片截图自:如何做一双适足的鞋子 — 自动制鞋生产线

王总这个工厂做鞋车间基本上都是机械化自动的,加上最后少量的人工校准。

整个制鞋大车间,有个机器负责把鞋底膜摆放好,传送带运到一个密闭小盒内,一个气垫放上,高温压印。鞋底成型了。image.png

(图片截图自:如何做一双适足的鞋子 — 自动制鞋生产线 )


传送到下一个链条,皮革准备好机器自动缝合,基本误差很低。


差不多了,最后上一个自动的拉伸鞋子看看生产的这个鞋子质量如何。


这时候鞋子基本上好了,后期销售再配点鞋带就可以了。


工程化/项目组织 是什么鬼呢? 就是通过一条纽带把项目的代码,文档,测试,脚本等组织管理起来,目标是提供一个简单的使用,比如mvn clean deploy直接发布jar包。或者npm run start去启动一个前端项目。就只有这个好处吗?

在这里做Java的朋友,可以理解为一个流水线很方便的按个按钮就将代码生成jar包,接着可以自动发送jar包,也允许少量人工比如把jar包发给一些个人使用。


回到实际项目中,这里拿一个Java项目来说

在外面项目中,我们会把代码,放在一些文件夹(package)中。


然后也有一些启动脚本(不同配件)放在特定目录,测试代码放在不同的目录。


然后用maven/gradle,里面使用了不同的插件(plugin)去运行代码的编译,代码测试,编译产物拷贝移动到特定目录。


然后用另一些插件去组织代码。


下面是一个真实的Shoe项目的“车间视图”,下面再解释。

(IntelliJ开发工具视角,左边文件目录结构,中间为pom.xml, 右边为构建生命周期)


image.png

让我们来看这个工作车间的一个产品作业线(一个子模块leixuewei-classobject)。


谈谈这个制鞋项目,编译一个鞋子类,写一个测试类,打包代码为一个jar包。

类似摆放鞋子原料,如上图,我们开发需要把代码相关文件放置好。

如下图,整个项目把代码分为了两个大目录src/main(核心代码) 和src/test (测试)


src/main/java 负责放置项目的核心代码

src/main/resources 负责放置项目运行相关配置

src/test/java 负责放置项目的测试代码

src/test/resources 负责放置项目测试相关配置


image.png

做Java的同学经常会使用一个叫Maven的软件工具,用它来管理项目的代码,依赖,同时执行测试,跟打包。


就像上面一个真正的制鞋子的车间图一样,Maven就像整个流水线系统一样。制鞋车间分步骤的组装鞋子,Maven分步骤地执行各个阶段的插件编译源码(填充鞋底),执行测试(机械臂拉伸缝好的鞋子),打包代码(自动配件分类包装)。


具体工作如下:Maven这个工具根据pom.xml读取项目组织,依赖,插件plugin(类似制鞋车间内的一些辅助维修工具)。


maven-compiler-plugin : 这个插件负责编译java代码成class文件

maven-surefire-plugin : 这个插件负责执行测试代码

maven-jar-plugin: 这个插件负责整理class和相关配置达成jar包

maven软件把这些插件绑定到了不同的软件构建生命周期,这就像一条龙车间流水线一样按照顺序执行,把源码转化为最终产品。


image.png

Maven 还能做的事情更多,这里只是展示了编译打包了一个jar,它还能把jar包上传到公共仓库给其他开发下载使用呢。


通过把整个项目使用Maven管理,以后需要打包项目,只需要运行mvn clean package就可以打包代码了。

这个命令就像,我们在制鞋车间,输入指令一样,车间根据指令执行对应的操作,保证了整个过程都是机械无人工参与,减少人为操作失误导致的质量问题。


小白听完,满脸高兴,这个过程还能自动化的,原来编程这么有意思的!(可不,软件世界只是现实世界的体现,对现实问题的抽象罢了!)


总结

好的项目工程化,可以把开发过程整规范管理。


分好了不同车间,不同成员开发不同的模块,大大减少互相干扰。


而且前端后端工程化技术棧不一样,大数据SparkJob项目也不一样,但是整个过程是很类似的,规范的把开发原材料(源码Java/Html/Js等等)转化为高质量的输出制品(jar包,zip包),也有构建好后直接把包分享和部署到测试环境运行的,甚至动态测试提升部署到线上的!


这里有一个点很重要,工程化需要适度原则,雷学委建议读者去参考对应语言的优秀开源项目的代码工程化方式!


学委见过把代码一股脑打包的,几个G,你就是上去改个标点符号也要打包半天,这不是好的工程化。


也看过把十几个类拆成6个项目,改一个类速度是快了,但是搞一个聚合功能,那你得跨组件修改代码,多个重新运行打包,得不偿失!


目录
相关文章
|
18天前
|
前端开发 开发者 C++
通过对比普通开发者与大牛们的学习策略,揭秘他们高效学习的秘诀
前端技术日新月异,大牛们如何保持竞争力?本文对比普通开发者与大牛的学习策略,揭示高效学习的秘诀:明确目标、主动探索、系统资源、注重实践、持续学习。通过这些方法,大牛们能快速掌握新技术并应用于实际工作。
54 5
|
7月前
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
168 0
|
28天前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
2月前
|
前端开发 Java 关系型数据库
探索后端开发:从基础到高级的旅程
【10月更文挑战第20天】本文将带你走进后端开发的世界,通过通俗易懂的语言和实际代码示例,让你从零基础开始,逐步了解并掌握后端开发的核心技术。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到适合自己的学习路径和方法。让我们一起开启这场技术之旅吧!
39 5
|
2月前
|
存储 前端开发 JavaScript
前端技术深度探索:从基础到现代框架的实践之旅
前端技术深度探索:从基础到现代框架的实践之旅
36 2
|
7月前
|
存储 API 数据库
探索后端开发的奥秘:从基础到高级
【5月更文挑战第31天】本文将带领读者深入理解后端开发的世界,从基础的服务器和数据库知识,到复杂的API设计和微服务架构。我们将通过实例和案例分析,揭示后端开发的关键概念和技术,帮助读者提升他们的技能和知识。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
4月前
|
前端开发 API 数据库
探索后端开发之巅:从基础到高级实践
【8月更文挑战第29天】在技术的世界里,后端开发是一块基石,它支撑着无数应用的运行和数据的处理。本文将带你从零基础开始,逐步深入到后端开发的高级实践,包括语言选择、框架搭建、数据库设计、API开发以及性能优化等方面。我们将通过浅显易懂的语言和实际代码示例,帮助你构建起坚实的后端开发知识体系,让你能够自信地应对各种后端挑战。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的学习资源和实践指导。
|
6月前
|
前端开发 JavaScript 开发工具
Web前端开发学习资料:深度探索与开发实践
Web前端开发学习资料:深度探索与开发实践
45 3
|
5月前
|
开发框架 程序员
「随笔」编程中的技术难题与挑战
编程中的挑战如bug、性能优化和跨平台兼容性,常考验程序员的智慧和经验。空指针异常需仔细检查代码,内存泄漏需使用分析工具并理解内存管理,而跨平台兼容性涉及不同设备接口和协议。程序员通过创新方法,如内存管理和跨平台框架,解决问题,展现创造力和技能。这些难题既是障碍,也是成长的契机。
40 0
|
5月前
|
设计模式 Java 测试技术
Java后端开发的最佳工程实践与规范
Java后端开发的最佳工程实践与规范
下一篇
无影云桌面