雷學委趣談編程 大型鞋廠與開發工程化
朋友們,小白奶奶上次聽雷學委趣味故事學會了類和對象。
回去狂寫代碼,寫了很多代碼,面向對象,繼承,多態,入門,初級的統統都寫了。
雷學委既想表揚,又不能! 畢竟,老人這樣猛敲代碼,對身體不好! 不過老人代碼寫的很不錯,小白看了想要整理匯編成一個新手填坑展示項目(挺有頭腦啊!不愧是遺傳!)
跑過來找學委,你看我奶奶這代碼,好多個文件夾,請問怎么樣把這些組織好,方便代碼分享啊?
哇,項目工程化這一塊很重要啊,很多小白寫很多代碼最后還是零散分布的,沒有形成自己的積累,其實很虧!
效果如下,可惜端午節過去太久,雷學委只能順著鞋廠大學問再深入講解,不然給大伙講如何工程化包粽子也不是不行呢。
[video(video-ZnIFrLb2-1624973751272)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=291486723)(image-https://ss.csdn.net/p?http://i0.hdslb.com/bfs/archive/8f14917231c1a3e7800ac975461eb21ba09ab457.jpg)(title-雷學委趣味編程配套食用:一個Java項目的簡單工程化)]
來,我們一起看看,王總的大型鞋廠一條龍
大企業家王總,雖是半路出家做鞋子,可做事一點也不迷糊。
他經歷過一塊塊磚頭,一車車水泥沙石鋼筋堆砌成一層層樓房的時候,也經歷過一棟棟一片片的房屋出售的沖鋒時刻,啥場面沒見過。
自然想的已非個人親手做一只只鞋起家,而是直接聯系了很多大鞋廠老板,說要給他們投資,結果參觀學習了3個月,探訪了不少不同規模鞋廠。
王總:想要搞大規模,就必須把體系做好。所以轉型做鞋子,第一步,得把整個工程生產線搭建好,不然別的都是白干費力!
雷學委認為做軟件也是如此,工程化是很重要的。高效的組織代碼,構建高質量代碼產品,對個人對企業都是很有幫助的!
小白直呼,商人特么精明!這手段玩的是一套一套的,要是王總寫代碼不知道得多6!
鞋子是怎么來的?
原料: 鞋底,鞋帶,皮革,縫合線等等的。這些組合而成就是一只鞋子,然后再成對匹配。
這些肯定都標準化,每雙鞋都是同一系列的步驟照做的,不然最好做出來的鞋子形狀千奇百怪,怎么做好銷量?(又不是搞個人定制鞋款的)
說到這,小白好像突然開竅了,插嘴說:您是不是想說,這些玩意就跟我們的源代碼一樣?
小白激動地說:做好的鞋子,那就是相對于發布的一個jar包啊?!
哈哈哈,小白說出這個理解,學委很開心。
這樣講解工程化就好理解了!這里補充一下jar包,這是我們java同學有時候寫了一些代碼直接打個jar文件,包含程序發給別人直接運行。有點類似python的whl包,但是有區別,whl包只能用pip安裝后在代碼使用。
不錯喲! 小白悟性是越來越好了。
小白又問,那繼續說說具體工程化吧?手動打包搞多了挺累的,有時候漏了被同學嘲笑還得再來!
好的,讓我們繼續看看王總怎么做的唄。(下圖為鞋底機械自動成型)
(圖片截圖自:如何做一雙適足的鞋子 — 自動制鞋生產線 )
王總這個工廠做鞋車間基本上都是機械化自動的,加上最后少量的人工校準。
整個制鞋大車間,有個機器負責把鞋底膜擺放好,傳送帶運到一個密閉小盒內,一個氣墊放上,高溫壓印。鞋底成型了。
(圖片截圖自:如何做一雙適足的鞋子 — 自動制鞋生產線 )
傳送到下一個鏈條,皮革準備好機器自動縫合,基本誤差很低。
差不多了,最后上一個自動的拉伸鞋子看看生產的這個鞋子質量如何。
這時候鞋子基本上好了,后期銷售再配點鞋帶就可以了。
工程化/項目組織 是什么鬼呢? 就是通過一條紐帶把項目的代碼,文檔,測試,腳本等組織管理起來,目標是提供一個簡單的使用,比如mvn clean deploy直接發布jar包。或者npm run start去啟動一個前端項目。就只有這個好處嗎?
在這里做Java的朋友,可以理解為一個流水線很方便的按個按鈕就將代碼生成jar包,接著可以自動發送jar包,也允許少量人工比如把jar包發給一些個人使用。
回到實際項目中,這里拿一個Java項目來說
在外面項目中,我們會把代碼,放在一些文件夾(package)中。
然后也有一些啟動腳本(不同配件)放在特定目錄,測試代碼放在不同的目錄。
然后用maven/gradle,里面使用了不同的插件(plugin)去運行代碼的編譯,代碼測試,編譯產物拷貝移動到特定目錄。
然后用另一些插件去組織代碼。
下面是一個真實的Shoe項目的“車間視圖”,下面再解釋。
(IntelliJ開發工具視角,左邊文件目錄結構,中間為pom.xml, 右邊為構建生命周期)
讓我們來看這個工作車間的一個產品作業線(一個子模塊leixuewei-classobject)。
談談這個制鞋項目,編譯一個鞋子類,寫一個測試類,打包代碼為一個jar包。
類似擺放鞋子原料,如上圖,我們開發需要把代碼相關文件放置好。
如下圖,整個項目把代碼分為了兩個大目錄src/main(核心代碼) 和src/test (測試)
src/main/java 負責放置項目的核心代碼
src/main/resources 負責放置項目運行相關配置
src/test/java 負責放置項目的測試代碼
src/test/resources 負責放置項目測試相關配置
做Java的同學經常會使用一個叫Maven的軟件工具,用它來管理項目的代碼,依賴,同時執行測試,跟打包。
就像上面一個真正的制鞋子的車間圖一樣,Maven就像整個流水線系統一樣。制鞋車間分步驟的組裝鞋子,Maven分步驟地執行各個階段的插件編譯源碼(填充鞋底),執行測試(機械臂拉伸縫好的鞋子),打包代碼(自動配件分類包裝)。
具體工作如下:Maven這個工具根據pom.xml讀取項目組織,依賴,插件plugin(類似制鞋車間內的一些輔助維修工具)。
maven-compiler-plugin : 這個插件負責編譯java代碼成class文件
maven-surefire-plugin : 這個插件負責執行測試代碼
maven-jar-plugin: 這個插件負責整理class和相關配置達成jar包
maven軟件把這些插件綁定到了不同的軟件構建生命周期,這就像一條龍車間流水線一樣按照順序執行,把源碼轉化為最終產品。
Maven 還能做的事情更多,這里只是展示了編譯打包了一個jar,它還能把jar包上傳到公共倉庫給其他開發下載使用呢。
通過把整個項目使用Maven管理,以后需要打包項目,只需要運行mvn clean package就可以打包代碼了。
這個命令就像,我們在制鞋車間,輸入指令一樣,車間根據指令執行對應的操作,保證了整個過程都是機械無人工參與,減少人為操作失誤導致的質量問題。
小白聽完,滿臉高興,這個過程還能自動化的,原來編程這么有意思的!(可不,軟件世界只是現實世界的體現,對現實問題的抽象罷了!)
總結
好的項目工程化,可以把開發過程整規范管理。
分好了不同車間,不同成員開發不同的模塊,大大減少互相干擾。
而且前端后端工程化技術棧不一樣,大數據SparkJob項目也不一樣,但是整個過程是很類似的,規范的把開發原材料(源碼Java/Html/Js等等)轉化為高質量的輸出制品(jar包,zip包),也有構建好后直接把包分享和部署到測試環境運行的,甚至動態測試提升部署到線上的!
這里有一個點很重要,工程化需要適度原則,雷學委建議讀者去參考對應語言的優秀開源項目的代碼工程化方式!
學委見過把代碼一股腦打包的,幾個G,你就是上去改個標點符號也要打包半天,這不是好的工程化。
也看過把十幾個類拆成6個項目,改一個類速度是快了,但是搞一個聚合功能,那你得跨組件修改代碼,多個重新運行打包,得不償失!
小白直白的問:何時需要工程化調整?
當你打包測試代碼這些時間大大超過開發寫代碼的時間,那你就得想想工程化是不是沒做好!!!
另外,建議長期關注學習這個 =>雷學委趣味編程故事匯編。
好了小白,學委這次分享就到這里,你回去告訴奶奶要多多注意身體,每天掌握一點點知識,勞逸結合更好呢!
持續學習持續開發,我是雷學委!
編程很有趣,關鍵是把技術搞透徹講明白。
歡迎關注,還有盡情!
參考鏈接
本文的工程化展示項目
Maven 一款Java項目組織利器
如何做一雙適足的鞋子 — 自動制鞋生產線
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。